多线程socket通信client

来源:互联网 发布:淘宝店铺经营类别 编辑:程序博客网 时间:2024/05/20 00:12

控制台下实现多线程socket通信,服务端为每个请求的客户端创建一个线程,进行通信。(其实这些MSDN里都有)

一.基本流程如下:
定义变量->获得winsock版本->加载winsock库->初始化->创建套接字->设置套接字选项->关闭套接字->卸载winsock库->释放资源

二.客户端 建立过程(下篇是服务端)

1   初始化WSA 

 2   建立一个SOCKET 

3   连接到服务器 

4   发送和接受数据 

 5   断开连接 

三.注意winsock下编程有用到两个库

Winsock2.h
ws2_32.lib  

#include <Winsock2.h>#include <stdio.h>#include <string>#include <iostream>using namespace std;#pragma comment(lib,"ws2_32.lib")int main(int argc, char* argv[]){// (1)加载套接字库WORD wVersionRequested;//WinSock库的版本号WSADATA wsaData;int iResult;wVersionRequested = MAKEWORD(1, 1);iResult = WSAStartup(wVersionRequested, &wsaData);if( iResult != NO_ERROR){printf("WSAStartup() failed with error: %d\n", iResult);return -1 ;}if( LOBYTE( wsaData.wVersion) != 1 || HIBYTE( wsaData.wVersion) !=1 ){WSACleanup();return -2;}// (2)创建套接字SOCKET sockClient = socket( AF_INET,SOCK_STREAM, 0 );if (sockClient == INVALID_SOCKET) {printf("socket function failed with error: %ld\n", WSAGetLastError());WSACleanup();return -1;}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(51555);// (3)向服务器发出连接请求iResult = connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));if (iResult == SOCKET_ERROR){printf("connect function failed with error %d\n", WSAGetLastError());WSACleanup();return -1;}// (4)发送接收数据string strSend;while(cin >> strSend){//发送数据send(sockClient, strSend.c_str(), strSend.size()+1, 0);//接受数据char recvBuf[100] = {0};if (recv( sockClient, recvBuf, 100, 0) != SOCKET_ERROR){printf("receive text: %s\n", recvBuf);}}// (5)结束处理iResult = closesocket(sockClient);if (iResult == SOCKET_ERROR){printf("closesocket function failed with error %d\n", WSAGetLastError());WSACleanup();return -1;}WSACleanup();return 0;}



原创粉丝点击