简单的 C++ SOCKET编程 ---基于TCP/IP协议(转) & 双道通信
来源:互联网 发布:dot.js 转amd 编辑:程序博客网 时间:2024/06/06 17:46
server端: #include <WINSOCK2.H>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")void main(){ //创建套接字 WORD myVersionRequest; WSADATA wsaData; myVersionRequest=MAKEWORD(1,1); int err; err=WSAStartup(myVersionRequest,&wsaData); if (!err) { printf("已打开套接字\n"); } else { //进一步绑定套接字 printf("嵌套字未打开!"); return; } SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字 //需要绑定的参数 SOCKADDR_IN addr; addr.sin_family=AF_INET; addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址 addr.sin_port=htons(6000);//绑定端口 bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//绑定完成 listen(serSocket,5);//其中第二个参数代表能够接收的最多的连接数 ////////////////////////////////////////////////////////////////////////// //开始进行监听 ////////////////////////////////////////////////////////////////////////// SOCKADDR_IN clientsocket; int len=sizeof(SOCKADDR); while (1) { SOCKET serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听 char sendBuf[100]; sprintf(sendBuf,"welcome %s to bejing",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里 send(serConn,sendBuf,strlen(sendBuf)+1,0); char receiveBuf[100];//接收 recv(serConn,receiveBuf,strlen(receiveBuf)+1,0); printf("%s\n",receiveBuf); closesocket(serConn);//关闭 WSACleanup();//释放资源的操作 }} client端: #include <WINSOCK2.H>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")void main(){ int err; WORD versionRequired; WSADATA wsaData; versionRequired=MAKEWORD(1,1); err=WSAStartup(versionRequired,&wsaData);//协议库的版本信息 if (!err) { printf("客户端嵌套字已经打开!\n"); } else { printf("客户端的嵌套字打开失败!\n"); return;//结束 } SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN clientsock_in; clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); clientsock_in.sin_family=AF_INET; clientsock_in.sin_port=htons(6000); //bind(clientSocket,(SOCKADDR*)&clientsock_in,strlen(SOCKADDR));//注意第三个参数 //listen(clientSocket,5); connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//开始连接 char receiveBuf[100]; recv(clientSocket,receiveBuf,101,0); printf("%s\n",receiveBuf); send(clientSocket,"hello,this is client",strlen("hello,this is client")+1,0); closesocket(clientSocket); WSACleanup();}
双道通信:
昨天刚写了个单向的,仅是雏形,还要修改,仅供参考/****************************************************************************//* client.cpp By chostrider *//* http://hi.baidu.com/chostrider/*/#include <winsock2.h>#include <stdio.h>#include <string>#include <iostream>using namespace std;int main(){WSADATA wsa;SOCKET sockFD;char Buff[1024],*sBO;string str="Welcome!!!";WSAStartup(MAKEWORD(2,2),&wsa);sockFD = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);struct sockaddr_in server;server.sin_family = AF_INET;server.sin_port = htons(3764);server.sin_addr.s_addr=inet_addr("127.0.0.1");connect(sockFD,(struct sockaddr *)&server,sizeof(server));//strcpy(sBO,"Welcome!!!");strcpy(Buff,str.c_str());sBO = Buff;send(sockFD,sBO,20,0);while(cin>>str){ strcpy(Buff,str.c_str()); sBO = Buff; send(sockFD,sBO,20,0);}closesocket(sockFD);WSACleanup();return 1;}/****************************************************************************//****************************************************************************//* server.cpp By chostrider *//* http://hi.baidu.com/chostrider/*/#include <winsock2.h>#include <stdio.h>char Buff[1024];int main(){WSADATA wsa;SOCKET listenFD;int ret;WSAStartup(MAKEWORD(2,2),&wsa);listenFD = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);struct sockaddr_in server;server.sin_family = AF_INET;server.sin_port = htons(3764);server.sin_addr.s_addr=ADDR_ANY;ret=bind(listenFD,(sockaddr *)&server,sizeof(server));ret=listen(listenFD,2);int iAddrSize = sizeof(server);SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize);unsigned long lBytesRead;while(1) {lBytesRead=recv(clientFD,Buff,1024,0);if(lBytesRead<=0) break;printf("receive %d bytes\n",lBytesRead);printf(Buff);printf("\n");ret=send(clientFD,Buff,lBytesRead,0);if(ret<=0) break;}WSACleanup();return 0;}/****************************************************************************/ 编译后先运行是s.exe,再运行c.exe,在c.exe中输入可在s.exe中显出
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议(转) & 双道通信
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议(转)
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议(转)
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议
- 基于TCP/IP协议的socket编程
- 基于TCP/IP协议的Socket编程
- SOCKET编程 ---基于TCP/IP协议(转)
- 基于TCP/IP协议下的Socket通信
- Java基于TCP/IP协议的Socket网络通信详解
- 基于TCP/IP协议及UDP协议的socket编程
- Endian的由来
- svd++
- oracle中Blob和Clob类型的区别!
- 直流调速脉冲放大 包质量
- Substring poj1226
- 简单的 C++ SOCKET编程 ---基于TCP/IP协议(转) & 双道通信
- 2012软考资料
- OTL使用总结
- hdoj_2032 杨辉三角
- Windows下编译测试BM3D算法效果
- 二分匹配的Hopcroft-Carp算法
- RPM Command: 15 Examples to Install, Uninstall, Upgrade, Query RPM Packages
- 找新朋友 + 数论
- hdu 2187 悼念512汶川大地震遇难同胞——老人是真饿了