基于TCP的Socket网络编程,有图有代码
2012-06-20 18:25
381 查看
1.新建一个工作区 Tcp
在工作区中添加两个工程 TcpSrv(服务端)和TcpClient (客户端)
2.在工程TcpSrv添加TcpSrv.cpp文件
代码如下:
编译时会报错,添加链接库文件 ws2_32.lib
3.在工程TcpClient中添加 TcpClient.cpp 文件
代码如下
同样添加库文件ws2_32.lib 记得前面有个空格
4.先运行服务端程序后运行客户端程序会看到效果
在工作区中添加两个工程 TcpSrv(服务端)和TcpClient (客户端)
2.在工程TcpSrv添加TcpSrv.cpp文件
代码如下:
#include <WINSOCK2.H> #include <stdio.h> void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData); if (err != 0 ) { return; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) !=1 ) { WSACleanup(); return; } SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //htonl() 将主机的无符号长整形数转换成网络字节顺序 addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000); //htons() 将主机的无符号短整形数转换成网络字节顺序 bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //将套接字绑定到一个已知的地址上 listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while (1) { SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[100]; sprintf(sendBuf,"Welcome %s to http://www.sunxin.org", //sprintf 把格式化的数据写入某个字符串中 inet_ntoa(addrClient.sin_addr)); //inet_ntoa将一个IP转换成一个互联网标准点分格式的字符串 send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[100]; recv(sockConn,recvBuf,100,0); printf("%s\n",recvBuf); closesocket(sockConn); } }
编译时会报错,添加链接库文件 ws2_32.lib
3.在工程TcpClient中添加 TcpClient.cpp 文件
代码如下
#include <WINSOCK2.H> #include <stdio.h> void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData); if (err != 0) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE(wsaData.wVersion) != 1 ) { WSACleanup(); return; } SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0); 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(6000); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //连接 建立socket连线 char recvBuf[100]; recv(sockClient, recvBuf , 100 , 0 ); printf("%s\n",recvBuf); send(sockClient,"This is zhangsan",strlen("This is zhangsan")+1,0); closesocket(sockClient); //关闭套接字 WSACleanup(); //中止Winsock 2 DLL (Ws2_32.dll) 的使用 }
同样添加库文件ws2_32.lib 记得前面有个空格
4.先运行服务端程序后运行客户端程序会看到效果
相关文章推荐
- 基于C#的socket编程的TCP异步的实现代码
- 第六篇:JAVA网络编程之TCP Socket通信中由read返回值造成的的死锁问题(含代码)
- Java——多人聊天室(基于TCP的网络编程——Socket)
- 初识-----基于Socket的UDP和TCP编程及测试代码
- 初识-----基于Socket的UDP和TCP编程及测试代码
- 宋体、代码-iOS网络编程实践--NSStream实现TCP Socket iPhone客户端-by小雨
- 基于tcp_socket通信的网络编程
- Java网络编程基础(二)-- 基于TCP/IP的Socket编程
- socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信
- 基于TCP/IP的网络编程接口:Socket
- Socket网络编程:基于TCP多线程通信
- socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信
- 基于TCP/IP的网络编程接口:Socket
- Linux网络编程之[基于socket通信的tcp协议的编程模型]
- Java——多人聊天室(基于TCP的网络编程——Socket)
- 网络编程----基于TCP的socket编程
- socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信
- 基于TCP和UDP的Socket编程事例代码
- linux socket网络编程二 基于tcp
- Java网络编程实践和总结 --- 基于TCP的Socket编程之echo回显的操作