很久以前写过一次,不过那时候时懵懵懂懂的,我也不知道我自己到底有没有弄懂。现在又来把它重温一遍,虽然是简单的winsocket,但是从新看,还是有不同的感受。在这里把winsock的面向连接的代码给出 服务器端: #include <winsock2.h> #include <iostream> using namespace std; int main() { cout<<"this is the servers"<<endl; //连接套接字库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 1; } if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); return 1; } //创建socket SOCKET Srvscok =socket(AF_INET,SOCK_STREAM,0); //绑定地址 SOCKADDR_IN AddrSrv; AddrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); AddrSrv.sin_family = AF_INET; AddrSrv.sin_port = htons(6000); bind(Srvscok,(SOCKADDR*)&AddrSrv,sizeof(SOCKADDR)); // 监听 listen(Srvscok,1); //接受信息 SOCKADDR_IN AddrClient;//从AddrClient接受信息 int len = sizeof(SOCKADDR); char recvBuf[100]; char sendBuf[100]; char *ip; while (1) { SOCKET ConSock = accept(Srvscok,(SOCKADDR*)&AddrClient,&len); ip = inet_ntoa(AddrClient.sin_addr); recv(ConSock,recvBuf,100,0); cout<<ip<<":"<<endl; cout<<recvBuf<<endl; cout<<"YOU:/n"; cin.getline(sendBuf,100); send(ConSock,sendBuf,strlen(sendBuf)+1,0); closesocket(ConSock); } } 客户端: #include <winsock2.h> #include <iostream> #include <cstring> using namespace std; int main() { cout<<"this is the client"<<endl; //连接套接字库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 1; } if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); return 1; } char *ip; char ch[100]; while (1) { //创建socket SOCKET Clientscok =socket(AF_INET,SOCK_STREAM,0); //取得主机ip与端口并与之连接 sockaddr_in AddrSrv; AddrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); AddrSrv.sin_family = AF_INET; AddrSrv.sin_port = htons(6000); //通信 char recbuf[100]; connect(Clientscok,(sockaddr*)&AddrSrv,sizeof(sockaddr)); ip = inet_ntoa(AddrSrv.sin_addr); cout<<"YOU:/n"; cin.getline(ch,100); send(Clientscok,ch,strlen(ch)+1,0); recv(Clientscok,recbuf,100,0); cout<<ip<<":/n"; cout<<recbuf<<endl; //关闭socket closesocket(Clientscok); } //关闭库的访问 WSACleanup(); }