分享
 
 
 

Linux下TCP网络编程与基于Windows下C#socket编程间通信

王朝学院·作者佚名  2016-05-26
窄屏简体版  字體: |||超大  

linux下TCP网络编程与基于Windows下C#socket编程间通信一、linux下TCP网络编程基础,需要了解相关函数

Socket():用于套接字初始化。

Bind():将socket与本机上的一个端口绑定,就可以在该端口监听服务请求。

Listen():使socket处于被动的监听模式,并为该socket建立一个输入数据队列,将到达的服务器,请求保存在此队列中,直到程序处理他们。

Accept():让服务器接收客户的连接请求。

Connect():客户端使用connect函数来配置socket并与远端服务器建立一个TCP连接。

Close():关闭socket

Send():发送函数

Recv():接受函数

二、服务器和客户端流程图如下图所示

三、linux下TCP编程实例

TCP服务器程序

1 /* server.c */ 2 #include <sys/types.h> 3 #include <sys/socket.h> 4 #include <sys/ioctl.h> 5 #include <netinet/in.h> 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <string.h> 9 #include <unistd.h>10 #define PORT 2000 //定义端口号11 #define BUFFER_SIZE 1024 12 #define MAX_QUE_CONN_NM 5 //最大缓冲队列13 int main(void)14 {15 16 /*下面该以太网套接字地址结构体非常重要*/17 struct sockaddr_in server_addr,client_addr; 18 int sin_size,recvbytes,wbytes;19 int ser_fd,cli_fd; 20 char buf[BUFFER_SIZE];21 /* 建立 socket 连接,ipv4 协议,字节流套接字 */22 if((ser_fd = socket(AF_INET,SOCK_STREAM,0))== -1)23 {24 perror("socket");25 exit(1);26 }27 PRintf("Socket id = %d\n",ser_fd);28 /* 初始化 sockaddr_in 结构体 */29 server_addr.sin_family = AF_INET;30 server_addr.sin_port = htons(PORT);31 server_addr.sin_addr.s_addr = INADDR_ANY;32 bzero(&(server_addr.sin_zero),8);33 /* 绑定函数 bind */34 if(bind(ser_fd,(struct sockaddr *)&server_addr,sizeof(struct 35 sockaddr))==-1)36 {37 perror("bind");38 exit(1); 39 }40 printf("Bind success!\n");41 42 /* 调用 listen 函数,进行监听 */43 if(listen(ser_fd,MAX_QUE_CONN_NM)== - 1) 44 {45 perror("listen");46 exit(1); 47 }48 printf("Listening......\n");49 50 /* 调用 accept 函数,等待客户端的连接 */51 if((cli_fd = accept(ser_fd,(struct sockaddr *)&client_addr,&sin_size))==-1)52 {53 perror("accept");54 exit(1); 55 }56 printf("Have client ready for connecting\n");57 58 /* 调用 recv 函数接收客户端的请求 */59 memset(buf,0,sizeof(buf));60 if((recvbytes = recv(cli_fd,buf,BUFFER_SIZE,0))== -1)61 {62 perror("recv");63 exit(1); 64 }65 /* 将收到的信息(客服端发来的信息)打印出来 */66 printf("Received a message:%s\n",buf); 67 /*对客户端发过来的数据进行处理,只是将首字符加2,再发给客户端*/68 buf[0]=buf[0]+2;69 if( ( wbytes = write(cli_fd,buf,strlen(buf)) ) == -1 )70 {71 perror("handle send");72 exit(1);73 }74 else 75 printf("handle buf is %s\n",buf);76 /* 关闭 socket */77 close(ser_fd);78 return 0;79 }

TCP客端程序

1 /*client*/ 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<sys/ioctl.h> 5 #include<netinet/in.h> 6 #include<netdb.h> 7 #include<stdio.h> 8 #include<stdlib.h> 9 #include<string.h>10 #include<unistd.h>11 #define PORT 2000 //端口号12 #define BUFFER_SIZE 102413 int main(int argc,char *argv[])14 {15 struct sockaddr_in server_addr;16 int sockfd,sendbytes,rbytes;17 //int ser_fd;18 char buf[BUFFER_SIZE];19 struct hostent *host;20 /*指定输入参数为3个,否则出错*/21 if(argc!=3)22 {23 perror("Usage:./clinet IP address Text\n");24 exit(1);25 }26 /*地址解析函数*/27 if( ( host = gethostbyname(argv[1]) ) == NULL ) //得到主机名及相应信息28 {29 perror("gethostbyname");30 exit(1);31 }32 memset(buf,0,sizeof(buf));33 sprintf(buf,"%s",argv[2]);34 buf[strlen(buf)+1]='\0';35 /*建立socket连接,IPv4协议,字节流套接字*/36 37 if( ( sockfd = socket(AF_INET,SOCK_STREAM,0) ) == -1 )38 {39 perror("socket");40 exit(1);41 }42 printf("Socket id = %d\n",sockfd);43 44 /*初始化sockaddr_in 结构体*/ 45 server_addr.sin_family = AF_INET; //TCP/IP协议簇46 server_addr.sin_port = htons(PORT); // sin_port存储端口号(使用网络字节顺序) htons将unsigned short从主机字节序转化为网络字节序47 server_addr.sin_addr = *((struct in_addr *)host->h_addr); //前面指过的,host主机名及相应信息的指针,这里为IP地址48 bzero(&(server_addr.sin_zero),8); //等同于memset,清空作用49 /*调用connect函数主动发起对服务器的连接*/50 if( ( connect(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr)) ) == -1 ) //第2个参数,指向要连接套接字的sockaddr结构体的指针51 {52 perror("connect");53 exit(1);54 }55 printf("connect server success!\n");56 /*发送消息给服务器端*/57 if( ( sendbytes = send(sockfd,buf,strlen(buf),0) ) == -1 )58 {59 perror("send");60 exit(1);61 }62 else printf("buf is %s\n",buf);63 /* 将服务器处理后的数据读取出来 */64 if ((rbytes=read(sockfd,buf,100))==-1)65 {66 printf("read handle error\n");67 exit(0);68 }69 else 70 printf("read handle buf is %s \n",buf);71 close(sockfd);72 return 0;73 }

四、程序运行结果如下:

客户端结果

服务器结果

五、C#socket()编程

参考资料:http://lanxicy.com/read/9740d8d480de02ad528ada5d.html

对该资料进行了些修改生成exe文件

运行结果如下

C#TCP客户端

C#TCP服务器

六、由于linux下和C#下都使用了TCP网络编程,所以用linux当作客户端,C#当作服务器,设置好端口号和IP地址,

他们之间是可以通信的,然后在C#下可以把相关的数据写入数据库里面,相关网页再从数据库里面读取相关数据就行了。

运行结果如下

Linux客户端

C#服务器

七、总结心得

linux下的网络编程和Windows下C#网络编程都是使用TCP协议进行通信,所以即使是跨平台,他们之间还是能进行通信的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有