首页 > 其他 > 详细

简单的socket通信

时间:2014-06-26 00:30:09      阅读:562      评论:0      收藏:0      [点我收藏+]
//client
#include <iostream> #include <WinSock2.h> #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib using namespace std; int main() { SOCKET so; WSADATA ws; if (WSAStartup(MAKEWORD(2, 2), &ws) != 0) { cout << "WSAStartup failed" << endl; } if((so = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { cout << "socket failed" << endl; } //绑定地址时需要将主机字节序转换成网络字节序,这个地址是需要连接的ip和端口 sockaddr_in addr = {0}; addr.sin_addr.s_addr = inet_addr("127.0.0.1");//此地址是网络字节序,需要将主机字节序抓换成网络字节序,inet_addr:可以转换ip地址 addr.sin_family = AF_INET; addr.sin_port = htons(2000); //addr.sin_zero if(connect(so, (sockaddr*)&addr, sizeof(sockaddr)) == SOCKET_ERROR)//connect,系统自动分配端口号和IP,无需自己绑定 { cout << "connect failed" << endl; } char sendBuf[4096]; while(1) { fgets(sendBuf, 4096, stdin); if(send(so, sendBuf, strlen(sendBuf), 0) < 0)//send { cout << "send failed" << endl; } } system("pause"); closesocket(so); WSACleanup(); return 0; }
//server
#include <iostream> #include <winsock2.h> #include <windows.h> #pragma comment(lib, "WS2_32") // 链接到WS2_32.lib using namespace std; int main() { //有一种非阻塞的socket,没有用过 SOCKET so; WSADATA ws; if (WSAStartup(MAKEWORD(2, 2), &ws) != 0) { cout << "WSAStartup failed" << endl; } if((so = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)//创建socket { cout << "scoket failed" << endl; } sockaddr_in addr = {0}; addr.sin_addr.s_addr = inet_addr("127.0.0.1");//将字符串ip地址转换成网络字节顺序的整型值 addr.sin_family = AF_INET; addr.sin_port = htons(2000);//此地址是网络字节序,需要将主机字节序抓换成网络字节序 //addr.sin_zero if(bind(so, (struct sockaddr*)&addr, sizeof(sockaddr)) != 0)//bind { cout << "bind failed" << endl; } if(listen(so, 10) == -1)//监听so套接字 { cout << "listen failed" << endl; } sockaddr_in addrclient; int client; int nrecv; char buff[4096]; while (true) { if((client = accept(so, (struct sockaddr*)&addrclient, NULL)) == -1)//accept客户端的连接,返回连接的套接字,此函数时阻塞函数 { continue; } //输出IP //cout << inet_ntoa(addrclient.sin_addr.s_addr);//将网络格式的ip转换成.分格式的字符串 while (true) { nrecv = recv(client, buff, 4096, 0);//recv也是阻塞函数 buff[nrecv] = \0; cout << buff << endl; } } WSACleanup(); system("pause"); return 0; }

有点小bug

简单的socket通信,布布扣,bubuko.com

简单的socket通信

原文:http://www.cnblogs.com/zzyoucan/p/3804329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!