网络通信TCP编程实例代码
2016-05-23 18:02
507 查看
Makefile:
server.c:
client.c:
all: gcc -o server server.c -lpthread gcc -o client client.c clean: rm server client
server.c:
/*TCP: server.c */ #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <pthread.h> void *do_work(void *arg); int main(int argc,char *argv[]) { int sockfd; int ret; /*1.调用socket建立网络套接字*/ sockfd = socket(AF_INET,SOCK_STREAM,0); if(-1 == sockfd){ perror("socket server"); return -1; } /*2.填充服务器地址和端口号*/ struct sockaddr_in servaddr; memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; //协议族 servaddr.sin_port = htons(6775); //端口号5001-65536 servaddr.sin_addr.s_addr = inet_addr("192.168.7.223"); //ip地址 socklen_t alen = sizeof(servaddr); /*3.调用bind绑定服务器地址和端口*/ ret = bind(sockfd,(struct sockaddr *)&servaddr,alen); if(-1 == ret){ perror("bind"); return -1; } /*4.调用listen主动监听是否有客户连接*/ ret = listen(sockfd,10); if(-1 == ret){ perror("listen"); return -1; } printf("servet init.d success...\n"); int newfd = -1; //新的套接字描述符 char buf[1024] = {0}; pthread_t tid; //新建线程ID while(1) { /*5.调用accept接受客户端连接*/ newfd = accept(sockfd,NULL,NULL); if(newfd <= 0){ continue; } printf("==>%d connect success..\n",newfd); /*为每个客户开辟一个线程去管理*/ ret = pthread_create(&tid,NULL,do_work,&newfd); if(0 != ret){ perror("pthread_create failed\n"); break; } pthread_detach(tid);//设置为分离态,资源由系统自动回收 } /*7.关闭打开的网络套接字***/ close(sockfd); close(newfd); return 0; } /*线程执行函数*/ void *do_work(void *arg) { int newfd = *(int *)arg; int ret; char buf[1024]; /*6.调用read/write读写网络文件*/ while(1) { memset(buf,0,sizeof(buf)); ret = read(newfd,buf,sizeof(buf)-1); if(ret > 0){ printf("recv data:%s\n",buf); } } pthread_exit(NULL); }
client.c:
/*TCP: client.c */ #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> int main(int argc,char *argv[]) { int sockfd; int ret; char buf[1024] = {0}; /*1.调用socket建立网络套接字*/ sockfd = socket(AF_INET,SOCK_STREAM,0); if(-1 == sockfd){ perror("socket server"); return -1; } /*2.填充服务器地址和端口号*/ struct sockaddr_in servaddr; memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; //协议族 servaddr.sin_port = htons(6775); //端口号5001-65536 servaddr.sin_addr.s_addr = inet_addr("192.168.7.223"); //ip地址 socklen_t alen = sizeof(servaddr); /*3.调用connect连接服务器(根据ip地址和端口去连接)*/ ret = connect(sockfd,(struct sockaddr *)&servaddr,alen); if(-1 == ret){ perror("connect"); return -1; } printf("client connect success...\n"); /*4.调用read/write读写网络文件*/ while(1) { /*从终端获取信息*/ memset(buf,0,sizeof(buf)); ret = read(0,buf,sizeof(buf)-1); if(ret > 0){ /*发送给服务器*/ write(sockfd,buf,ret); } } /*7.关闭打开的网络套接字***/ close(sockfd); return 0; }
相关文章推荐
- http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html
- apache服务之https、访问控制、status等功能
- IIS发不报错“HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。”
- 如何用70行代码实现深度神经网络算法
- httpSession的正确理解
- CentOS中ThinkPHP下的http500
- Java网络编程基础(四)---基于TCP的简单聊天系统
- TCP并发式服务器编程实现
- TCP/IP,udp,socket
- Web/HTTP 调试利器(Fiddler)
- Fiddler(Web/HTTP调试利器)
- Android网络编程(六)OkHttp3用法全解析
- 计算机网络OSPF协议
- CentOS6.7 x64 网络配置
- 【神经网络】:一篇很好的介绍感知机的文章(至少可以做作业了)
- OkHttp源码分析之基本框架2
- Cocos2d—X游戏开发之(socket)Mac下网络抓包工具(Cocoa Packet Analyzer使用教程)
- Java 网络编程
- HTTP1.1学习笔记 -- RFC2616
- TCP/IP协议原理与应用笔记26:网际协议(IP)之 分片(Fragmentation)