国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux下TCP網絡編程與基于Windows下C#socket編程間通信

2024-06-28 13:20:47
字體:
來源:轉載
供稿:網友
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協議進行通信,所以即使是跨平臺,他們之間還是能進行通信的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河北省| 思南县| 西丰县| 汶上县| 淮北市| 郯城县| 海晏县| 平凉市| 望谟县| 苏尼特左旗| 阳东县| 榆社县| 涟水县| 广元市| 台山市| 公安县| 咸宁市| 龙山县| 定南县| 鹿泉市| 五莲县| 夏河县| 辰溪县| 车险| 汨罗市| 潞城市| 赤壁市| 盐源县| 黑河市| 察隅县| 阿坝县| 礼泉县| 天峻县| 永宁县| 淅川县| 吉安县| 临武县| 兴海县| 乌兰浩特市| 松原市| 宜城市|