实现服务器端多次写,客户端多次读。
2015-06-01 21:46
267 查看
服务器端:
tcp_server:
客户端:
tcp_client :
运行结果:
服务器端:
客户端:
tcp_server:
#include <stdio.h> #include <stdlib.h> #include <winsock2.h> #pragma comment(lib,"WS2_32.lib") void ErrorHandling(char* message); int main(int argc, char* argv[]) { WSADATA wsaData; SOCKET hServSock, hClntSock; SOCKADDR_IN servAddr, clntAddr; int szClntAddr; char message[]="Hello World!"; int i; if(argc!=2) { printf("Usage : %s <port>\n", argv[0]); exit(1); } if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0) ErrorHandling("WSAStartup() error!"); hServSock=socket(PF_INET, SOCK_STREAM, 0); if(hServSock==INVALID_SOCKET) ErrorHandling("socket() error"); memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_family=AF_INET; servAddr.sin_addr.s_addr=htonl(INADDR_ANY); servAddr.sin_port=htons(atoi(argv[1])); if(bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr))==SOCKET_ERROR) ErrorHandling("bind() error"); if(listen(hServSock, 5)==SOCKET_ERROR) ErrorHandling("listen() error"); szClntAddr=sizeof(clntAddr); hClntSock=accept(hServSock, (SOCKADDR*)&clntAddr,&szClntAddr); if(hClntSock==INVALID_SOCKET) ErrorHandling("accept() error"); for(i=0;i<sizeof(message);i++) { send(hClntSock, &message[i], 1, 0); } closesocket(hClntSock); closesocket(hServSock); WSACleanup(); return 0; } void ErrorHandling(char* message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }
客户端:
tcp_client :
#include <stdio.h> #include <stdlib.h> #include <winsock2.h> #pragma comment(lib,"WS2_32.lib") void ErrorHandling(char* message); int main(int argc, char* argv[]) { WSADATA wsaData; SOCKET hSocket; SOCKADDR_IN servAddr; char message[30]; int strLen=0; int idx=0, readLen=0; if(argc!=3) { printf("Usage : %s <IP> <port>\n", argv[0]); exit(1); } if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error!"); hSocket=socket(PF_INET, SOCK_STREAM, 0); if(hSocket==INVALID_SOCKET) ErrorHandling("hSocket() error"); memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_family=AF_INET; servAddr.sin_addr.s_addr=inet_addr(argv[1]); servAddr.sin_port=htons(atoi(argv[2])); if(connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr))==SOCKET_ERROR) ErrorHandling("connect() error!"); while(readLen=recv(hSocket, &message[idx++], 1, 0)) { if(readLen==-1) ErrorHandling("read() error!"); strLen+=readLen; } printf("Message from server: %s \n", message); printf("Function read call count: %d \n", strLen); closesocket(hSocket); WSACleanup(); return 0; } void ErrorHandling(char* message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }
运行结果:
服务器端:
客户端:
相关文章推荐
- BP神经网络的数学原理及其算法实现
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- 开放的智力2:游戏不值得
- Go 只读/只写channel
- Linux基本操作及使用工具
- 第一个Android应用
- Linux进程控制命令之kill与killall
- dev c++无法调试的问题
- 动态类型识别RTTI与Dynamic_cast运算符
- 客运综合管理系统项目—售票管理(废票)
- depot用例视图建模
- 030.某系统用户远超70亿
- Go pprof性能监控
- servlet
- 多线程要使用线程安全的函数
- WCF医院管理系统技术解析小功能(一)输入身份证验证年龄、性别、出生年月
- 安卓自动登录demo——SharedPreferences的应用
- 开放的智力1: 一无所有
- go os/exec执行外部程序
- Python脚本测试---列表的排序和删除