Socket网络编程——C++版源码
来源:互联网 发布:福利电影网 cms 编辑:程序博客网 时间:2024/06/05 20:33
本代码可直接使用 根据TCP/IP三次握手,实验时可使用两台电脑,或者打开两个终端模拟通信。
服务器端:
#include <iostream>#include <windows.h>using namespace std;#pragma comment(lib,"ws2_32.lib") //引用静态链接库void main(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2,2); err =WSAStarup( wVersionRequested,&wsaData); if( err != 0).0 { //tell the user that we could nto find a usable //WinSock DLL; return; } if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2) { WSACleanup(); return; } //The WinSock DLL is acceptable,Proceed windows下版本的协商 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SOCKET sockSer;//服务器套接字 sockSer = socket(AF_INET,SOCK_STREAM,0);//创建套接字,AF_INET代表IP家族,0是默认的方式创建 有连接是流式 无连接是数据包套接字 SOCKADDR_IN addrSer,addrCli; addrSer.sin_family = AF_INET; addrSer.sin_port = htons(5050); addrSer.sin_addr.S_un.S_addr = inet_addr("192.168.3.173"); bind(sockSer,(SOCKADDR)*&addrSer,sizeof(SOCKADDR));//绑定套接字 跟服务器的相关地址信息进行绑定 listen(sockSer,5);//监听套接字 5是队列大小 SOCKET sockConn;//给出一个相应的套接字 int len = sizeof(SOCKADDR); cout<<"Server Wait Client Connect......."<<endl; sockConn = accept(sockSer,(SOCKADDR*)&addrCli,&len);//处理新到连接 3个参数分别是服务器的套接字号;客户端地址,相应地址层度的地址以地址形式传递 if(sockConn == INVALID_SOCKET);//INVALID_SOCKET非法套接字 { cout<<"Server Accept Client Connect Fail"<<endl; return; } else { cout<<"Server Accept Client Connect Success"<<endl; return; } char sendbuf[256]; char recvbuf[256]; while(1) { cout<<"Ser:>" cin>>sendbuf;//缓冲区 if(strcmp(sendbuf,"quit")==0);//相等表示服务器请求退出 { break; } send(sockConn,sendbuf,strlen(sendbuf)+1,0);//发送服务器 +1为了字符串的/0 3个参数分别是要发送的套接字,缓冲,长度 recv(sockConn,recvbuf,256,0);//接收 cout<<"Cli:>"<<recvbuf<<endl; } closesocket(sockSer);// WSACleanup();//清除版本信息}
用户端:
#include <iostream>#include <windows.h>using namespace std;#pragma comment(lib,"ws2_32.lib")void main(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2,2); err =WSAStarup( wVersionRequested,&wsaData); if( err != 0) { //tell the user that we could nto find a usable //WinSock DLL; return; } if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2) { WSACleanup(); return; } //The WinSock DLL is acceptable,Proceed windows下版本的协商 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SOCKET sockSli;//服务器套接字 sockSli = socket(AF_INET,SOCK_STREAM,0);//创建套接字 家族协议;流式套接字;默认值 SOCKADDR_IN addrSer;// addrSer.sin_family = AF_INET; addrSer.sin_port = htons(5050); addrSer.sin_addr.S_un.S_addr = inet_addr ("127.0.0.1"); int res = connect(sockCli,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));//res为connect返回值 查阅相关函数,若为0则表示没有错误 if (res != 0) { cout<<"Client Connect Servrer Fail!"<<endl; return; } else { cout<<"Client Connect Servrer Success!"<<endl; } char sendbuf[256]; char recvbuf[256];//发空间和接收空间 while(1) { recv(sockCli,recvbuf,256,0); cout<<"Ser:>"<<recvbuf<<endl; cout<<"Cli:>"; cin>>sendbuf; if(strcmp(sendbuf,"quit") == 0)//客户端请求退出 { break; } send(sockCli,sendbuf,strlen(sendbuf)+1,0); } closesocket(sockCli); WSACleanup();}
两个程序的原理本质是一样的网上有很多类似的原理介绍,这里不再赘述,只需要按照这个原理图,一步步实现代码即可。
阅读全文
0 0
- Socket网络编程——C++版源码
- C 网络编程 socket
- 网络编程—socket编程
- 网络编程 C++ ———MFC Socket
- 网络编程 C++ ———MFC Socket
- 【Linux 内核网络协议栈源码剖析】socket.c——BSD Socket层(1)
- 【Linux 内核网络协议栈源码剖析】socket.c——BSD Socket层(1)
- 【Linux 内核网络协议栈源码剖析】socket.c——BSD Socket层(1)
- Linux c 网络socket编程
- Linux c 网络socket编程
- C网络socket编程指南
- C#Socket网络编程大全
- 网络编程基础——Socket编程
- [C#] .net网络编程之一:Socket编程
- linux C 编程 之 socket 网络编程
- 【Linux 内核网络协议栈源码剖析】af_inet.c——INET Socket层(2)
- 【Linux 内核网络协议栈源码剖析】af_inet.c——INET Socket层(2)
- 【Linux 内核网络协议栈源码剖析】af_inet.c——INET Socket层(2)
- 【scala 格式化操作】Scala的字符串 格式化 输出
- typedef enum和enum的用法
- VS小问题:error c4996: 'fopen': This function or variable may be unsafe
- Matrix calculus(矩阵微积分)(第四部分),向量求导恒等式(II))
- android关于微信分享和登录的一些注意点
- Socket网络编程——C++版源码
- Android数据库高手秘籍(一)——SQLite命令
- Opencv中Mat、IplImage、 CvMat之间转换总结
- 【认知智能】邓志东教授:如何迈向认知智能与通用人工智能
- 【区块链】全球视角下的区块链和加密数字货币发展报告
- 【人工智能】人工智能工程师从0到1的进阶之路!
- TensorFlow Lite
- 【智能驾驶】最全、最强的无人驾驶技术学习路线
- Mobile DevOps