Socket編程:之雙機通信

服務端:

 1 #include<sys/socket.h>
 2 #include<sys/types.h>
 3 #include<stdio.h>
 4 #include<unistd.h>
 5 #include<stdlib.h>
 6 #include<string.h>
 7 #include<netdb.h>
 8 #include<netinet/in.h>
 9 #include<arpa/inet.h>
10 #include<pthread.h>
11 
12 
13 void recv_data(void* fd)
14 {
15     int sockfd = *((int *)fd);
16     char buf[200];
17     int  renum;
18     while(1)
19     {
20     bzero(buf, 200);
21 
22     if((renum = recv(sockfd, buf, 200, 0)) > 0)
23     {
24         printf("recv: %s\n", buf);
25     }
26     else if(renum == -1)
27     {
28         printf("recv -1");
29         exit(-1);
30     }
31     }
32 }
33 int main(void)
34 {
35     pthread_t pid;
36     int sockfd;
37     struct sockaddr_in serveraddr;
38 
39     char buf[200];
40     sockfd = socket(AF_INET, SOCK_STREAM, 0);
41     bzero(&serveraddr, sizeof(struct sockaddr));
42     serveraddr.sin_family = AF_INET;
43     serveraddr.sin_port = htons(4444);
44     serveraddr.sin_addr.s_addr = inet_addr("192.168.0.100");
45 
46 
47     if(connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr)) == -1)
48     {
49         printf("connect failed\n");
50         exit(-1);
51     }
52     else
53         printf("connect succeed \n");
54     pthread_create(&pid, NULL, (void*)recv_data,(void*)&sockfd);
55     while(1)
56     {
57         memset(buf, 0, 200);
58         gets(buf);
59 
60         send(sockfd, buf, strlen(buf), 0);
61         if(strncmp(buf, "quit", 4) == 0)
62         {
63             close(sockfd);
64             return 0;
65         }
66 
67     }
68     close(sockfd);
69     return 0;
70 }

?

客戶端:

  1 #include<sys/socket.h>
  2 #include<sys/types.h>
  3 #include<stdio.h>
  4 #include<unistd.h>
  5 #include<stdlib.h>
  6 #include<string.h>
  7 #include<netdb.h>
  8 #include<netinet/in.h>
  9 #include<arpa/inet.h>
 10 #include<pthread.h>
 11 
 12 void recv_data(void* fd)
 13 {
 14     int sockfd = *((int *)fd);
 15     char buf[200];
 16     int  renum;
 17     while(1)
 18     {
 19         bzero(buf, 200);
 20         
 21         //recv(sockfd, buf, 200, 0);//如果斷開 ,recv不再阻塞  返回值 0
 22         //printf("recv: %s\n", buf);
 23 
 24         if((renum = recv(sockfd, buf, 200, 0)) > 0)
 25             printf("recv: %s\n", buf);
 26         else if(renum == -1)
 27         {
 28             printf("recv -1");
 29             exit(-1);
 30         }
 31         else 
 32         {
 33             close(sockfd);
 34             exit(1);
 35             
 36         }
 37         
 38     
 39     }
 40 
 41 }
 42 int main(void)
 43 {
 44     pthread_t pid;
 45     int sockfd, clientfd;
 46     int sinsize;
 47     char buf[200];
 48     struct sockaddr_in myaddr, clientaddr;
 49     sockfd = socket(AF_INET, SOCK_STREAM, 0);    
 50     if(sockfd == -1)
 51     {
 52         printf("socket failed\n");
 53         exit(-1);
 54     }
 55     printf("%d\n", sockfd);
 56 
 57     bzero(&myaddr, sizeof(struct sockaddr));
 58     myaddr.sin_family = AF_INET;
 59     myaddr.sin_port = htons(4444);
 60     myaddr.sin_addr.s_addr =inet_addr("192.168.0.100");
 61     sinsize = 1;
 62     setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sinsize, sizeof(int));
 63     if(bind(sockfd, (struct sockaddr*)&myaddr, sizeof(struct sockaddr)) == -1)
 64     {
 65         printf("bind failed\n");
 66         exit(-1);
 67     }
 68 
 69     if(listen(sockfd, 1) == -1)
 70     {
 71         printf("listen failed\n");
 72         exit(-1);
 73     }
 74     sinsize = sizeof(struct sockaddr);
 75     if((clientfd = accept(sockfd, (struct sockaddr *)&clientaddr, &sinsize)) == -1)
 76     {
 77         printf("accept failed\n");
 78         exit(-1);
 79     }
 80     else
 81         printf("accept succeed\n");
 82     pthread_create(&pid, NULL, (void*)recv_data,(void*)&clientfd);
 83     while(1)
 84     {
 85         memset(buf, 0, 200);
 86         gets(buf);
 87         if(strncmp(buf, "quit", 4) == 0)
 88         {
 89             close(clientfd);
 90             close(sockfd);
 91             return 0;
 92         }
 93         send(clientfd, buf, strlen(buf), 0);
 94     }
 95     sleep(1);
 96 
 97     close(clientfd);
 98     close(sockfd);
 99 
100     return 0;
101 }

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284038.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284038.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284038.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jquery中$each()

$.each()&#xff1a;可用于遍歷任何的集合(無論是數組或對象) $(selector).each()&#xff1a;專用于jquery對象的遍歷, 如果是數組,回調函數每次傳入數組的索引和對應的值(值亦可以通過this 關鍵字獲取,但javascript總會包裝this 值作為一個對象—盡管是一個字符串或是一個數…

【QGIS入門實戰精品教程】7.2:QGIS點狀數據符號化設置案例教程

點狀符號化的類型有:單一符號、分類、漸進、基于規則、點的位移、點聚類、熱圖。 相關閱讀: 【QGIS入門實戰精品教程】7.1:QGIS面狀數據符號化設置案例教程 文章目錄 一、單一符號二、分類三、漸進四、基于規則五、點的位移六、點聚類七、熱圖一、單一符號 跟面狀符號一樣,…

SpringCloud與Dubbo的比較

Dubbo 一、dubbo簡介 Dubbo是阿里巴巴公司開源的一個高性能優秀的服務框架&#xff0c;使得應用可通過高性能的RPC實現服務的輸出和輸入功能&#xff0c;可以和Spring框架無縫集成。 Dubbo是一款高性能、輕量級的開源Java RPC框架&#xff0c;它提供了三大核心能力&#xff…

VR 技術加上 8K 畫質! 2016 年里約奧運會亮點十足

據報道&#xff0c;2016 年里約奧運會將運用到 VR 技術。 最近&#xff0c;奧林匹克廣播服務公司&#xff08;OBS&#xff09;表示出對虛擬現實技術的興趣&#xff0c;其實用虛擬現實技術報道賽事已經不是什么新鮮的事了&#xff0c;之前 NBA 就這樣做過&#xff0c;但是將奧運…

POJ 1986 Distance Queries(LCA)

【題目鏈接】 http://poj.org/problem?id1986 【題目大意】 給出一棵樹&#xff0c;問任意兩點間距離。 【題解】 u,v之間距離為dis[u]dis[v]-2*dis[LCA(u,v)] 【代碼】 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; c…

WPF 實現柱形統計圖

WPF 實現柱形統計圖WPF 實現柱形統計圖作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開源許可協議&#xff1b;避免畫線發虛DrawingContext…

Win11卸載WSL,卸載Windows子系統

雖然 Linux 發行版可以通過 Microsoft Store 安裝&#xff0c;但不能通過 Microsoft Store 卸載。 可以通過下列命令卸載。 1、查看當前環境安裝的wsl wsl --list2、注銷&#xff08;卸載&#xff09;當前安裝的Linux的Windows子系統 wsl --unregister Ubuntu3、卸載成功&#…

100億人口會挨餓嗎?人工智能迎擊全球糧食問題

給作物看病的AI、走路“長眼”的拖拉機、上帝視角的衛星數據分析——未來吃飯就靠它們了。 圖片來源&#xff1a;Blue River Technology 人類又面臨了一項危機——隨著人口不斷膨脹&#xff0c;到2050年人類總人口也許要達到100億&#xff0c;然而&#xff0c;地球卻沒有等比例…

Python學習總結15:時間模塊datetime time calendar (二)

二 、datetime模塊 1. datetime中常量 1&#xff09;datetime.MINYEAR&#xff0c;表示datetime所能表示的最小年份&#xff0c;MINYEAR 1。 2&#xff09;datetime.MAXYEAR&#xff0c;表示datetime所能表示的最大年份&#xff0c;MAXYEAR 9999。 2. datetime中的常見類 da…

switch注意事項

Day03_SHJavaTraining_4-5-2017 switch注意事項&#xff1a;①switch語句接受的數據類型  switch語句中的表達式的數據類型,是有要求的    JDK1.0 - 1.4 數據類型接受 byte short int char    JDK1.5 數據類型接受 byte short int char enum(枚舉)  …

WSL1 和 WSL2對比

從 WSL1 更新到 WSL2的主要原因包括&#xff1a; 提高文件系統性能&#xff0c;支持完全的系統調用兼容性。 WSL 2 使用最新、最強大的虛擬化技術在輕量級實用工具虛擬機 (VM) 中運行 Linux 內核。 但是&#xff0c;WSL 2 不是傳統的 VM 體驗。 ? 本指南將比較 WSL 1 和 WSL …

SkiaSharp 之 WPF 自繪 粒子花園(案例版)

此案例包含了簡單的碰撞檢測&#xff0c;圓形碰撞檢測方法&#xff0c;也可以說是五環彈球的升級版&#xff0c;具體可以根據例子參考。粒子花園這名字是案例的名字&#xff0c;效果更加具有科技感&#xff0c;很是不錯&#xff0c;搞搞做成背景特效也是不錯的選擇。Wpf 和 Ski…

xshell連接ubuntu

1.更新資料列表 sudo apt-get update2.安裝openssh-server sudo apt-get install openssh-server3.查看ssh服務是否啟動 sudo ps -e | grep ssh4.如果沒有啟動&#xff0c;啟動ssh服務 sudo service ssh start5.查看IP地址 sudo ifconfig如果出現xshell無法輸入密碼的情況…

教你從零開始搭建一款前端腳手架工具

本文系原創&#xff0c;轉載請附帶作者信息&#xff1a;Jrain Lau項目地址&#xff1a;https://github.com/jrainlau/s...前言 在實際的開發過程中&#xff0c;從零開始建立項目的結構是一件讓人頭疼的事情&#xff0c;所以各種各樣的腳手架工具應運而生。筆者使用較多的yoeman…

微信小程序 --- 頁面跳轉

第一種&#xff1a;wx.navigateTo({}); 跳轉&#xff1a; 注意&#xff1a;這種跳轉回觸發當前頁面的 onHide 方法&#xff0c;將當前頁面隱藏&#xff0c;然后顯示跳轉頁面。所以可以返回&#xff0c;返回的時候觸發 onShow方法進行顯示&#xff1a; &#xff08;項目的底部導…

Java基礎 深拷貝淺拷貝

Java基礎 深拷貝淺拷貝 非基本數據類型 需要new新空間class Student implements Cloneable{private int id;private String name;private Vector course;public Student(){try{Thread.sleep(1000);System.out.println("Student Constructor called.");}catch (Interr…

不安裝運行時運行 .NET 程序

好久沒寫文章了&#xff0c;有些同學問我公眾號是不是廢了&#xff1f;其實并沒有。其實想寫的東西很多很多&#xff0c;主要是最近公司比較忙&#xff0c;以及一些其他個人原因沒有時間來更新文章。這幾天抽空寫了一點點東西&#xff0c;證明公眾號還活著。長久以來的認知&…

一文弄懂分布式和微服務

簡單的說&#xff0c;微服務是架構設計方式&#xff0c;分布式是系統部署方式&#xff0c;兩者概念不同。 微服務 簡單來說微服務就是很小的服務&#xff0c;小到一個服務只對應一個單一的功能&#xff0c;只做一件事。這個服務可以單獨部署運行&#xff0c;服務之間可以通過R…

常見的js算法面試題收集,es6實現

1、js 統計一個字符串出現頻率最高的字母/數字 let str asdfghjklaqwertyuiopiaia; const strChar str > {let string [...str],maxValue ,obj {},max 0;string.forEach(value > {obj[value] obj[value] undefined ? 1 : obj[value] 1if (obj[value] > max)…

PHP面向對象(OOP)----分頁類

PHP面向對象(OOP)----分頁類 同驗證碼類&#xff0c;分頁也是在個人博客&#xff0c;論壇等網站中不可缺少的方式&#xff0c;通過分頁可以在一個界面展示固定條數的數據&#xff0c;而不至于將所有數據全部羅列到一起&#xff0c;實現分頁的原理其實就是對數據庫查詢輸出加了一…