首页 > 系统相关 >进程通信之套接字(TCP)

进程通信之套接字(TCP)

时间:2023-07-11 09:25:36浏览次数:36  
标签:struct TCP servaddr 之套 sin sizeof include recv 接字

1、服务器端

 1 #include<stdio.h>
 2 #include<sys/socket.h>//套接字
 3 #include<netinet/in.h>
 4 #include<string.h>
 5 #include<stdlib.h>
 6 #include<arpa/inet.h>//字节序转换
 7 #include<unistd.h>
 8 
 9 //可以正常运行了;
10 
11 #define SERVPORT 6666
12 
13 int main()
14 {
15     int listenfd,connfd;//两个套接口
16     struct  sockaddr_in servaddr,cliaddr;
17     socklen_t clilen;//这个定义的客户端套接字长度
18     char buf[100] = {0};
19     int bytes_recv;
20     //建立套接口
21     //第三个参数默认为0
22     listenfd = socket(AF_INET,SOCK_STREAM,0);
23     
24     //配置地址
25     bzero(&servaddr,sizeof(servaddr));
26     servaddr.sin_family = AF_INET;
27     servaddr.sin_port = htons(SERVPORT);
28     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//或者是单一地址
29 
30     int opt = 1;
31     setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));//端口复用
32 
33     bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));//强制类型转换
34 
35     listen(listenfd,1024);//队列数
36 
37     for(;;)//这个循环结束不了,其实服务器也不用停啊
38     {
39         clilen = sizeof(cliaddr);
40         connfd =  accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);
41         printf("accept client ip is %s,port is %u\n",inet_ntoa(cliaddr.sin_addr),cliaddr.sin_port);//port短整型
42 
43         while(1)
44         {
45             bzero(buf,sizeof(buf));
46             bytes_recv = recvfrom(connfd,buf,sizeof(buf),0,(struct sockaddr *)&cliaddr,&clilen);
47             if(0 == bytes_recv)
48             {
49                 printf("client offline!");
50                 break;
51             }
52             sendto(connfd,buf,bytes_recv,0,(struct sockaddr *)&cliaddr,clilen);
53         }
54         close(connfd);
55     }
56 
57     close(listenfd);
58 
59     return 0;
60 }

2、客户端

 1 #include<stdio.h>
 2 #include<sys/socket.h>
 3 #include<netinet/in.h>
 4 #include<string.h>
 5 #include<stdlib.h>
 6 #include<arpa/inet.h>//字节序转换
 7 #include<unistd.h>
 8 
 9 #define SERVPORT 6666
10 
11 int main(int argc,char **argv)
12 {
13     int sockfd;
14     struct sockaddr_in servaddr;
15     int bytes_recv;
16     char readline[100];
17     char sendline[100];
18 
19 //    if(argc != 2)
20 //  {
21   //      printf("please input the IP\n");
22     //    exit(0);
23     //}
24     //创建套接字
25     sockfd = socket(AF_INET,SOCK_STREAM,0);
26 
27     bzero(&servaddr,sizeof(servaddr));
28     servaddr.sin_family = AF_INET;
29     servaddr.sin_port = htons(SERVPORT);
30      //inet_aton(argv[1],&servaddr.sin_addr);
31     servaddr.sin_addr.s_addr = inet_addr("192.168.138.137");//直接绑定服务器端地址
32      
33     
34     //连接
35     connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
36     while((fgets(sendline,100,stdin)) != NULL)//等一会可以结束
37     {//减一是因为fgets读入了\n; 第四个参数好像也是flag
38         sendto(sockfd,sendline,strlen(sendline)-1,0,(struct sockaddr *)&servaddr,sizeof(servaddr));
39         bytes_recv = recvfrom(sockfd,readline,sizeof(readline),0,NULL,NULL);
40 
41         printf("recv character:%d\n",bytes_recv);
42         
43         bzero(readline,sizeof(readline));
44         bzero(sendline,sizeof(readline));
45 
46     }
47     
48     
49     close(sockfd);
50 
51     
52     return 0;
53 }

 

标签:struct,TCP,servaddr,之套,sin,sizeof,include,recv,接字
From: https://www.cnblogs.com/gunancheng/p/17542879.html

相关文章

  • 树莓派Linux跨平台免授权CNC数控数据采集协议,TCP协议包,支持(fanuc、三菱、西门子、海德
    市面上的数控基本都支持了跨平台通讯,下面以三菱为列讲解跨平台协议如何通讯,无需任何DLL,适配任何开发语言,纯Socket通讯先上采集图   代码如下usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;us......
  • tcp重传率高了解
    转自:https://developer.aliyun.com/article/231738,https://cloud.tencent.com/developer/article/14040891、介绍先给出某一台主机上评估tcp重传的指标,TCP重传率定义:TCP重传率=TCP重传的报文数量/TCP输出的报文数量;即tcpretransferradio=Retrans/outSegsTCP有重传是......
  • TcpClient
    publicclassTcpClient{publiceventAction<byte[]>OnReveive=delegate{};privateManualResetEventsendDone=newManualResetEvent(false);privateManualResetEventreceiveDone=newManualResetEvent(false);///<summary>......
  • tcpdump抓包命令详解
    一、参数介绍-A以ASCII格式打印出所有分组,并将链路层的头最小化。-c在收到指定的数量的分组后,tcpdump就会停止。-C在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数......
  • 【后端面经-计算机基础】HTTP和TCP的区别
    【后端面经-计算机基础】HTTP和TCP的区别目录【后端面经-计算机基础】HTTP和TCP的区别1.OSI七层模型和相关协议2.TCP协议2.1特点:2.2报文格式2.3三次握手和四次挥手3.HTTP协议3.1特点3.2报文格式3.2https和http4.HTTPvsTCP5.面试模拟参考资料1.OSI七层模型和相关协......
  • OSI TCP/IP模型 数据包报帧区别(自用)
    OSI七层模型OSI(OpenSystemInterconnectionReferenceModel,开放式通信系统互联参考模型)TCP/IP五层模型TCP/IP模型将OSI模型的应用层,表示层,会话层合并成了应用层数据包,数据报,帧的区别数据包与帧帧:数据链路层的传输单位数据包:可能由几个帧组成,可能超过MTUM......
  • RunnerGo 新增对WebSocket、dubbo、TCP/IP三种协议的API测试
    大家好,RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验,最近得知RunnerGo新增对,WebSocket、Dubbo、TCP/IP,三种协议API的测试支持,本篇文章跟大家分享一下使用方法。WebSocket协议WebSocket是一种在单个TCP连接上进行全双工通信的API技术。相比于传统的HTTP......
  • 图灵喜获Stevens名著《TCP/IP Illustrated》影印版权
    图灵再获得培生教育出版集团授权,即将出版《TCP/IP详解》(3卷)的影印版。此前,图灵在2006年先后出版了《Unix环境高级编程(第2版)》的影印版和翻译版。并于2009年11月推出了《UNIX网络编程》(2卷)的影印版。后者的翻译版正在翻译校订中,预计2010年5-6月出版。《TCP/IP详解》影印版将于2010......
  • Python基础37 基于tcp、udp套字编程、粘包现象、struct模块
    基于tcp协议的套接字编程(sochet编程)什么是socket?通常翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把tcp/ip层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中。套接字分类:AF_UNIX:用在局域网中AF_INET:用在互联网中客户端和服务端启动顺序......
  • TCP连接状态CLOSE_WAIT和TIME_WAIT详细分析
    一、TCP连接状态简介TCP协议规定,对于已经建立的连接,网络双方要进行四次挥手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。 网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服......