读书人

Windows Socket编程TCP实例

发布时间: 2012-11-04 10:42:42 作者: rapoo

Windows Socket编程TCP范例

参考文章:1.Windows Socket编程2.揭开Socket编程的面纱
    Windows下Socket TCP编程的大体流程如下:    Server端      1、初始化Windows Socket库.      2、创建Socket.      3、绑定Socket.      4、监听.      5、Accept.      6、接发数据.    Client端      1、初始化Windows Socket库.      2、创建Socket.      3、连接.      4、接发数据.
    以下示例中,服务端接受客户端连接,并创建线程处理接收数据。    客户端连接服务端,并向服务器端发送数据。
Server.cpp
#include <iostream>#include <windows.h>using namespace std;#pragma comment(lib, "Ws2_32.lib")#define PORT_NO 6000#define SRV_IP_ADDR "127.0.0.1"int main(int argc, char* argv[]){int ret;WSADATA wsaData;WORD wVersionRequested = MAKEWORD(2, 2);SOCKET sockClient;SOCKADDR_IN addrSrv;// 初始化Windows Socket------ret = WSAStartup(wVersionRequested, &wsaData);if (ret != 0) {cout << "WSAStartup() failed:" << WSAGetLastError() << endl;return -1;}    // 创建Socket------sockClient = socket(AF_INET, SOCK_STREAM, 0);if (INVALID_SOCKET == sockClient){cout << "socket() failed:" << WSAGetLastError() << endl;WSACleanup();return -1;}addrSrv.sin_addr.S_un.S_addr = inet_addr(SRV_IP_ADDR);addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(PORT_NO);// 连接------ret = connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));if (SOCKET_ERROR == ret){cout << "connect() failed:" << WSAGetLastError() << endl;closesocket(sockClient);WSACleanup();return -1;}else{cout << "connect() successfully." << endl;}// 发送数据------char sendBuf[MAX_PATH] = {0};while (1){cin.getline(sendBuf, sizeof(sendBuf));if (strcmp(sendBuf, "exit") == 0){break;}ret = send(sockClient, sendBuf, strlen(sendBuf)+1, 0);if (SOCKET_ERROR == ret){cout << "send() failed:" << WSAGetLastError() << endl;closesocket(sockClient);WSACleanup();return -1;}}// 清理资源-------closesocket(sockClient);WSACleanup();cout << "exit..." << endl;return 0;}

读书人网 >编程

热点推荐