//server #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main(int argc, char* argv[]) { //初始化WSA WORD sockVersion = MAKEWORD(2,2); WSADATA wsaData; if(WSAStartup(sockVersion, &wsaData)!=0) { return 0; } //创建套接字 SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(slisten == INVALID_SOCKET) { printf("socket error !"); return 0; } //绑定IP和端口 sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(8888); sin.sin_addr.S_un.S_addr = INADDR_ANY; if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) { printf("bind error !"); } //开始监听 if(listen(slisten, 5) == SOCKET_ERROR) { printf("listen error !"); return 0; } //循环接收数据 SOCKET sClient; sockaddr_in remoteAddr; int nAddrlen = sizeof(remoteAddr); char revData[255]; while (true) { printf("等待连接... "); sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen); if(sClient == INVALID_SOCKET) { printf("accept error !"); continue; } printf("接受到一个连接:%s ", inet_ntoa(remoteAddr.sin_addr)); //接收数据 int ret = recv(sClient, revData, 255, 0); if(ret > 0) { revData[ret] = 0x00; printf(revData); } //发送数据 const char * sendData = "你好,TCP客户端! "; send(sClient, sendData, strlen(sendData), 0); closesocket(sClient); } closesocket(slisten); WSACleanup(); return 0; } //client #include<WINSOCK2.H> #include<STDIO.H> #include<iostream> #include<cstring> #include <string> using namespace std; #pragma comment(lib, "ws2_32.lib") int main() { WORD sockVersion = MAKEWORD(2, 2); WSADATA data; if(WSAStartup(sockVersion, &data)!=0) { return 0; } while(true){ SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(sclient == INVALID_SOCKET) { printf("invalid socket!"); return 0; } sockaddr_in serAddr; serAddr.sin_family = AF_INET; serAddr.sin_port = htons(8888); serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); if(connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR) { //连接失败 printf("connect error !"); closesocket(sclient); return 0; } string data; cin>>data; const char * sendData; sendData = data.c_str(); //string转const char* //char * sendData = "你好,TCP服务端,我是客户端 "; send(sclient, sendData, strlen(sendData), 0); //send()用来将数据由指定的socket传给对方主机 //int send(int s, const void * msg, int len, unsigned int flags) //s为已建立好连接的socket,msg指向数据内容,len则为数据长度,参数flags一般设0 //成功则返回实际传送出去的字符数,失败返回-1,错误原因存于error char recData[255]; int ret = recv(sclient, recData, 255, 0); if(ret>0){ recData[ret] = 0x00; printf(recData); } closesocket(sclient); } WSACleanup(); return 0; }