socket编程TCP通信
1.单进程:
server服务器:
#include<stdio.h>
2 #include<sys/socket.h>
3 #include<arpa/inet.h>
4 #include<stdlib.h>
5 #include<unistd.h>
6 #include<string.h>
7 #include<netinet/in.h>
8
9
10 int connectfd,listenfd;
11 struct sockaddr_in serv_addr,cli_addr;
12 int ret;
13 socklen_t cli_addr_len;
14 void usage(const char* str)
15 {
16 printf("%s [IP][port]\n",str);
17 }
18
19 static int startup(const char *IP,int port){
20
21 listenfd=socket(AF_INET,SOCK_STREAM,0);
22 if(listenfd<0){
23 perror("socket");
24 exit(2);
25 }
26
27 serv_addr.sin_family= AF_INET;
28 serv_addr.sin_port = htons( atoi( port) );
29 serv_addr.sin_addr.s_addr = inet_addr(IP);
1,3 Top
31
32 int ret=bind(listenfd,(struct sockaddr*)(&(serv_addr)),sizeof(serv_addr));
33 if(ret<0){
34 perror("blind");
35 exit(3);
36 }
37
38 ret=listen(listenfd,20);
39 if(ret<0){
40 perror("listen");
41 exit(4);
42 }
43 return listenfd;
44 }
45 //serve : 127.0.0.1 888
46 int main(int argc,char* argv[])
47 {
48 if(argc!=3)
49 usage(argv[0]);
50 exit(1);
51
52 int listen_sock=startup(argv[1],atoi(argv[2]));
53 cli_addr_len=sizeof(cli_addr);
54 connectfd=acccept(listen_sock,(struct sockaddr*)(&cli_addr),&cli_addr_len);
55 if(connectfd<0){
56 perror("connectfd");
28,3 51%
exit(5);
58 }
59 printf("clie ip %s,clie port %d\n", inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));
60 int n=0;
61 char buf[1024]={0};
62 while(1){
63 n=read(connectfd,buf,sizeof(buf)-1);
64 if(n==0){
65 printf("clie quit\n");
66 break;
67 }else if(n<0){
68 exit(6);
69 }else{
70 buf[n]=0;
71 printf("cli say :%s\n",buf);
72 write(connectfd,buf,strlen(buf));
73 }
74
75 }
76 close(connectfd);
77 close(listenfd);
78
79 return 0;
80 }
client服务器:
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 #include<string.h>
5 #include<netinet/in.h>
6 #include<sys/socket.h>
7 #include<arpa/inet.h>
8
9
10
11 void usage(const char* str)
12 {
13 printf("%s,IP[],port[]",str);
14 }
15
16 int main(int argc,char* argv[])
17 {
18 if(argc!=3){
19 usage(argv[0]);
20 exit(0);
21 }
22 struct sockaddr_in serv_addr;
23 int sockfd;
24 sockfd=socket(AF_INET,SOCK_STREAM,0);
25 if(sockfd<0){
26 perror("sock");
27 exit(1);
28 }
29 serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(atoi(argv[2]));
31 serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
32 // linl serve
33 int ret=connect(sockfd,(struct sockaddr*)(&serv_addr),sizeof(serv_addr));
34 if(ret<0){
35 perror("connect");
36 exit(2);
37 }
38
39 int n=0;
40 char buf[1024]={0};
41 while(1){
42 printf("client# ");
43 fflush(stdout);
44 n=read(0,buf,sizeof(buf)-1);
45 buf[n-1]='\0';
46 write(sockfd,buf,strlen(buf));
47
48 n=read(sockfd,buf,sizeof(buf)-1);
49 buf[n]=0;
50 printf("server echo#: %s\n",buf);
51 }
52 close(sockfd);
53 return 0;
54 }
多线程socket
server:int main(int argc,char* argv[])
127 {
128
129 if(argc!=3){
130 usage(argv[0]);
131 exit(1);
132 }
133 int listen_sock=startup(argv[1],argv[2]);
134 cli_addr_len=sizeof(cli_addr);
135 while(1){
136 connectfd=accept(listen_sock,(struct sockaddr*)(&cli_addr),&cli_addr_len);
137 if(connectfd>0){
138 pid_t id=fork();
139 if(id==0){//child
140 if(fork()>0){
141 exit(1);
142 }else{
143 char buf[1024];
144 while(1){
145
146 int n=read(connectfd,buf,sizeof(buf)-1);
147 if(n==0){
148 printf("cli is quit");
149 break;
150 }else if(n<0){
151 exit(6);
}else {
153 buf[n]=0;
154 printf("cli is say:%s\n",buf);
155 write(connectfd,buf,strlen(buf));
156 }
157 }
158 }
159 }else{//father
160 close(connectfd);
161 }
162 }
163 else{
164 break;
165 }
166 }
167 }
多进程sock
server:
//Version 2
84 //void* newpthread(char* arg)
85 //{
86 /// int s=(int) arg;
87 // char buf[1024]={0};
88 // while(1){
89 // int n=read(s,buf,sizeof(buf)-1);
90 // if(n==0){
91 // printf("cli is quit");
92 // break;
93 // }else if(n<0){
94 // exit(6);
95 // }else {
96 // buf[n]=0;
97 // printf("cli is say:%s\n",buf);
98 // write(s,buf,strlen(buf));
99 // }
100 // }
101 // pthread_exit(NULL);
102 //}
103 //int main(int argc ,char* argv[])
104 //{/
105 // if(argc!=3){
106 // usage(argv[1]);
107 // exit(1);
108 // }
109
// int listen_sock=startup(argv[1],atoi(argv[2]));
111 // cli_addr_len=sizeof(cli_addr);
112 // connectfd=accept(listen_sock,(struct sockaddr*)(&cli_addr),&cli_addr_len);
113 // if(connectfd<0){
114 // perror("connectfd");
115 // exit(5);
116 // }
117 // printf("clie ip %s,clie port %d\n", inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));
118 // pthread_t tid;
119 // pthread_create(&tid,NULL,newpthread,(void*)connectfd);
120 // pthread_detach(tid);
121
122 // return 0;
123 //}
socket编程TCP通信相关推荐
- java socket 通信协议_java 基于TCP协议的Socket编程和通信
java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...
- socket编程 TCP 粘包和半包 的问题及解决办法
socket编程 TCP 粘包和半包 的问题及解决办法 参考文章: (1)socket编程 TCP 粘包和半包 的问题及解决办法 (2)https://www.cnblogs.com/panchang ...
- socket编程TCP/IP通信(windows下,C++实现)
1.简单理解什么是Socket? 通俗理解: Socket翻译成中文是套接字,同时也有插座的意思.可以按照插座的意思来理解它,插座就是连接电源和机器的中间件,同理,socket就是连接两个进程或应用的 ...
- 【Linux网络】Linux Socket编程 TCP协议
话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程 ...
- 1、Linux中的socket与TCP通信
socket介绍 1.所谓 socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. 2.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制. ...
- qt tcp通信_Qt之网络编程TCP通信
点击上方"Qt学视觉",选择"星标"公众号重磅干货,第一时间送达 想要学习的同学们还请认真阅读每篇文章,相信你一定会有所收获 TCP通信概述 TCP(Trans ...
- c语言广播程序,C语言socket编程---udp通信及广播
上篇实现了TCP通信的例子.由于项目中需要一个服务器向多台客户端发送消息. 通过udp这种无连接的通信,将client.c增加一句 /* 设置通讯方式对广播,即本程序发送的一个消息,网络上所有主机均可 ...
- Java网络编程 - TCP通信
文章目录 TCP通信 快速入门(一发一收) 编写客户端代码 编写服务器代码 多发多收 多发多收(同时接受多个客户端) 线程池优化 TCP通信 快速入门(一发一收) TCP协议回顾: TCP是一种面向连 ...
- Socket编程 | TCP编程基本流程和API详解-1
1. 基本概念 TCP (即传输控制协议) 是一种面向连接的传输层协议,它能提供高可靠性通信 (即数据无误.数据无丢失.数据无失序.数据无重复到达的通信). 2. 通信流程解析 TCP 通信的流程与打 ...
最新文章
- Android Jetpack组件之ViewModel使用
- 合理的使用纯函数式编程
- list mybatis批量保存_mybatis 批量将list数据插入到数据库的实现
- javascript canvas九宫格小程序
- CSVDE批量导入域用户
- c语言程序设计二级考试哪些题型,计算机二级考试题型
- 谷歌安装器 android8.0,Android 8.0版本安装谷歌四件套
- ROS配置ipv6方法
- 学习Spring之前要先学习什么?
- 盘点前端开发常用的几款编辑器
- 快应用中实现自定义抽屉组件
- 计算机一级解释,独家秘笈计算机一级错题解释.ppt
- iptables之state模块使用
- MVC项目文件夹说明和创建MVC
- 整理:Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux)
- (三)给亚马逊的EC2增加磁盘空间并安装cuDNN、AutoGluon等
- 怎么把flv转换成mp4格式?
- 计算机专业,刚上大一,该如何学习?
- oracle11g安装完成如何打开界面
- 国巨董事长:被动元件将缺货到2019,芯片电阻是重灾区