建立win32控制檯項目,然後新建cpp文件
server:
#include "WinSock2.h"
#include "stdio.h"
#pragma comment(lib,"Ws2_32.lib")//導入庫,lib表示庫," "表示庫的名稱
int main(int argc, CHAR* argv[])
{
//加載WinSock庫
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
return 0;
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return 0;
}
SOCKET lSocket,aSocket;
SOCKADDR_IN AddrSer;
AddrSer.sin_family=AF_INET;
AddrSer.sin_port=htons(5000);
AddrSer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//INADDR_ANY表示接受任何機器的請求
lSocket=socket(AF_INET,SOCK_STREAM,0);
//綁定服務器地址
if(::bind(lSocket,(SOCKADDR*)&AddrSer,sizeof(SOCKADDR))==SOCKET_ERROR)
{
printf("綁定套接字失敗");
return 0;
}
::listen(lSocket,1);//開始監聽客戶端的連接請求
SOCKADDR_IN AddrCli;//客戶端的地址信息
int len=sizeof(SOCKADDR);
aSocket=::accept(lSocket,(SOCKADDR*)&AddrCli,&len);//連接成功時,產生新的socket用來與客戶端通信
char recBuf[1024];
char senBuf[1024];
while (1)
{
//TCP下爲recv與send,UDP下爲recefrom與sendto
::recv(aSocket,recBuf,1024,0);
if (recBuf[0]=='#')
{
printf("客戶端請求斷開\n");
printf("正在斷開...");
Sleep(3000);
break;
}
printf("客戶端:%s\n",recBuf);
printf("服務器:");
gets_s(senBuf);//warming:gets()is unsafe
if (senBuf[0]=='#')
{
::send(aSocket,senBuf,1024,0);
printf("正在請求斷開...\n");
Sleep(3000);
return 0;
}
//printf("服務器:%s\n",senBuf);
::send(aSocket,senBuf,1024,0);
memset(recBuf,' ',1024);
memset(senBuf,' ',1024);
}
::closesocket(aSocket);
::closesocket(lSocket);
::WSACleanup();
return 0;
}
編輯運行
再建立客戶端項目 client,新建文件client.cpp
代碼爲:
#include "WinSock2.h"
#include "stdio.h"
#pragma comment(lib,"Ws2_32.lib")
int main(int argc, CHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
return 0;
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return 0;
}
SOCKET cSocket;
cSocket=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSer;
addrSer.sin_family=AF_INET;
addrSer.sin_port=htons(5000);
addrSer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
if(::connect(cSocket,(SOCKADDR*)&addrSer,sizeof(SOCKADDR))==SOCKET_ERROR)
{
printf("連接服務器失敗");
return 0;
}
char senBuf[1024];
char recBuf[1024];
while(1)
{
printf("客戶端:");
gets_s(senBuf);
if (senBuf[0]=='#')
{
::send(cSocket,senBuf,1024,0);
printf("正在請求斷開...\n");
Sleep(3000);
return 0;
}
//printf("客戶端:%s\n",senBuf);
::send(cSocket,senBuf,1024,0);
::recv(cSocket,recBuf,1024,0);
if(recBuf[0]=='#')
{
printf("與服務器斷開");
printf("正在斷開...");
Sleep(3000);
break;
}
printf("服務器:%s\n",recBuf);
memset(recBuf,' ',1024);
memset(senBuf,' ',1024);
}
::closesocket(cSocket);
::WSACleanup();
return 0;
}
編輯運行。
然後呢,先啓動server.exe,再啓動client.exe 好了 可以簡單地會話了,自己給自己聊天吧