服务端:
#include <stdio.h> #include <windows.h> #include <winsock.h> #define BufLen 32//发送接收缓冲区 #pragma comment(lib,"ws2_32.lib") int main() { SOCKET AcceptSocket;//标记连接标识句柄 WSADATA wsaData;///*定义WinSock结构*/ char SendBuf[BufLen] = "Server:Sending Data", RecvBuf[BufLen] = ""; int AddrLen; int byteSend; int byteRecv = SOCKET_ERROR; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)//初始化WinSockDLL { printf("初始化失败,错误号:%d\n",GetLastError()); return 1; } SOCKET m_socket;/*定义SOCKET结构用来保存套接字句柄*/ m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建套接口,对应地址族、服务类型、协议 if (m_socket == INVALID_SOCKET)//判断是否调用失败 { printf("socket调用失败,错误号:%d\n", GetLastError()); WSACleanup();//释放资源必写 return 2; } /*设置服务器信息,绑定IP和端口*/ SOCKADDR_IN service; service.sin_family = AF_INET;//同上地址族类型 service.sin_addr.S_un.S_addr = inet_addr("192.168.1.111");//绑定的IP service.sin_port = htons(345);//绑定的端口(转换为网络格式) /*绑定套接字IP和端口*/ if (bind(m_socket, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR) { printf("bind绑定失败,\n"); WSACleanup();//释放资源必写 return 3; } /*绑定之后监听,此时客户端可以connect()了*/ if (listen(m_socket, 5) == SOCKET_ERROR)//等待队列为5 { printf("listen监听失败\n"); WSACleanup();//释放资源必写 return 4; } AddrLen = sizeof(service); printf("Wait for a client to connect...\n"); while (1) { /*如果客户端connect(),则必须调用accept()函数标识连接*/ AcceptSocket = SOCKET_ERROR; while (AcceptSocket == SOCKET_ERROR)//等待客户端连接 { AcceptSocket=accept(m_socket, (sockaddr *)&service, &AddrLen); } printf("Client Connected.\n"); break;//连接之后不再标识连接 } ///至此就连接成功,等待发送来的数据//// byteRecv = recv(AcceptSocket, RecvBuf, BufLen, 0); printf("已接收字节数:%d\n内容:\n%s\n", byteRecv,RecvBuf); byteSend = send(AcceptSocket,SendBuf , sizeof(SendBuf) + 1, 0); printf("已发送字节数:%d\n内容:\n%s\n", byteSend, SendBuf); system("pause"); WSACleanup();//释放资源必写 return 0; }
客户端:
#include <stdio.h> #include <windows.h> #include<stdlib.h> #include <winsock.h> #pragma comment(lib,"ws2_32.lib") #define BufLen 32 int main() { WSADATA wsaData;///*定义WinSock结构*/ char SendBuf[BufLen]="Client Send Data\n"; int byteSend; int byteRecv = SOCKET_ERROR; char RecvBuf[BufLen] = ""; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)//初始化WinSockDLL { printf("初始化失败,错误号:%d\n", GetLastError()); return 1; } SOCKET m_socket;/*定义SOCKET结构用来保存套接字句柄*/ m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建套接口,对应地址族、服务类型、协议 if (m_socket == INVALID_SOCKET)//判断是否调用失败 { printf("socket调用失败,错误号:%d\n", GetLastError()); WSACleanup();//释放资源必写 return 2; } /*设置客户端信息,绑定IP和端口*/ SOCKADDR_IN client; client.sin_family = AF_INET;//同上地址族类型 client.sin_addr.S_un.S_addr = inet_addr("192.168.1.111");//远端服务IP client.sin_port = htons(345);//远端服务端口(转换为网络格式) /*连接服务端*/ if (connect(m_socket, (sockaddr *)&client, sizeof(client)) != 0) { printf("连接失败,错误代码:%d\n",GetLastError()); WSACleanup(); return 3; } ///成功连接服务端// byteSend = send(m_socket, SendBuf, BufLen, 0); printf("已发送字节数:%d\n内容:\n%s\n", byteSend, SendBuf); byteRecv=recv(m_socket, RecvBuf, BufLen, 0); printf("已接收字节数:%d\n内容:\n%s\n", byteRecv, RecvBuf); WSACleanup(); return 0; }