TCP/UDP 網絡編程實例

?
TCP服務器:
TCP_Server.c

#include<stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORTNUMBER 3333

int main(int argc,char*argv[])
{
????int sockfd,new_fd;
????struct sockaddr_in server_addr;
????struct sockaddr_in client_addr;
????int sin_size;
????int nbytes;
????char buffer[1024];

????//socket

????if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
????{
????????fprintf(stderr,"Socket error:%s\n",strerror(errno));
????????exit(1);
??? }
????//address

????bzero(&server_addr,sizeof(structsockaddr_in));
????server_addr.sin_family=AF_INET;
????server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
????server_addr.sin_port=htons(PORTNUMBER);

????//bind

????if(bind(sockfd,(structsockaddr *)(&server_addr),sizeof(structsockaddr_in))==-1)
????{
????????fprintf(stderr,"Bind error:%s\n",strerror(errno));
????????exit(1);
????}

????//listen

????if(listen(sockfd,5)==-1)
????{
????????fprintf(stderr,"Listen error:%s\n",strerror(errno));
????????exit(1);
????}

????while(1)
????{
????????sin_size=sizeof(structsockaddr_in);
?if((new_fd=accept(sockfd,(structsockaddr *)(&client_addr),&sin_size))==-1)
????????{
????????????fprintf(stderr,"Accept error:%s\n",strerror(errno));
????????????exit(1);
????????}
????????fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));

????????if((nbytes=read(new_fd,buffer,1024))==-1)
????????{
????????????fprintf(stderr,"Read Error:%s\n",strerror(errno));
????????????exit(1);
????????}
????????buffer[nbytes]='\0';
????????printf("Server received %s\n",buffer);
????????close(new_fd);
????}
}

?

TCP客戶端:

TCP_client.c?

#include<stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define PORTNUMBER 3333

int main(int argc,char*argv[])
{
????int sockfd;
????char buffer[1024];
????struct sockaddr_in server_addr;
????struct hostent*host;

????//使用hostent查詢host name

????if(argc!=2)
????{
????????fprintf(stderr,"Uage:%s hostname\a\n",argv[0]);
????????exit(1);
????}

????if((host=gethostbyname(argv[1]))==NULL)
????fprintf(stderr,"Gethostname error\n");
????????exit(1);
????}

????//socket

????if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
????{
????????fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
????????exit(1);
????}

????//ip port

????bzero(&server_addr,sizeof(server_addr));
????server_addr.sin_family=AF_INET;
????server_addr.sin_port=htons(PORTNUMBER);
????server_addr.sin_addr=*((structin_addr *)host->h_addr);

????//connect

????if(connect(sockfd,(structsockaddr *)(&server_addr),sizeof(structsockaddr_in))==-1)
????{
????????fprintf(stderr,"Connect error:%s\a\n",strerror(errno));
????????exit(1);
????}

????printf("Please input char:\n");
??? fgets(buffer,1024,stdin);
????write(sockfd,buffer,strlen(buffer));

????close(sockfd);
????exit(0);
}


--------------**************分割線***************-------------------

UDP服務器:

udp_server.c

? 1 #include <stdlib.h>
??2 #include<stdio.h>
??3 #include<errno.h>
??4 #include<string.h>
??5 #include<unistd.h>
??6 #include<netdb.h>
??7 #include<sys/socket.h>
??8 #include<netinet/in.h>
??9 #include<arpa/inet.h>
?10 #include<sys/types.h>
?11
?12 #define SERVER_PORT 8888
?13 #define MAX_MSG_SIZE 1024
?14
?15 void udps_respon(int sockfd)
?16 {
?17??? struct sockaddr_in addr;
?18??? int addrlen,n;
?19??? char msg[MAX_MSG_SIZE];
?20
?21?? ?while(1)
?22??? {
?23???? ?bzero(msg,sizeof(msg));
?24????? addrlen=sizeof(structsockaddr);
?25????? n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(structsockaddr *)&addr,&addrlen);
?26????? msg[n]='\0';
?27????? fprintf(stdout,"Server have received %s",msg);
?28??? }
?29 }
?30
?31
?32 int main(void)
?33 {
?34??? int sockfd;
?35??? struct sockaddr_in addr;
?36
?37 //socket

?38??? sockfd=socket(AF_INET,SOCK_DGRAM,0);
?39??? if(sockfd<0)
?40??? {
?41?????? fprintf(stderr,"Socket Error:%s\n",strerror(errno));
?42?????? exit(1);
?43??? }
?44
?45 //ip port
?46??? bzero(&addr,sizeof(structsockaddr_in));
?47??? addr.sin_family=AF_INET;
?48??? addr.sin_addr.s_addr=htonl(INADDR_ANY);
?49?? ?addr.sin_port=htons(SERVER_PORT);
?50
?51 //bind

?52??? if(bind(sockfd,(structsockaddr *)&addr,sizeof(structsockaddr_in))<0)
?53??? {
?54?????? fprintf(stderr,"Bind Error:%s\n",strerror(errno));
?55?????? exit(1);
?56??? }
?57??? udps_respon(sockfd);
?58??? close(sockfd);
?59 }

?

UDP客戶端:

udp_client.c?

? 1 #include <stdlib.h>
??2 #include<stdio.h>
??3 #include<errno.h>
??4 #include<string.h>
??5 #include<netdb.h>
??6 #include<sys/types.h>
??7 #include<arpa/inet.h>
??8 #include<sys/socket.h>
??9
?10 #define SERVER_PORT 8888
?11 #define MAX_BUF_SIZE 1024
?12
?13 void udpc_requ(int sockfd,conststruct sockaddr_in*addr,int len)
?14 {
?15??? char buffer[MAX_BUF_SIZE];
?16?? ?int n;
?17??? while(1)
?18?? ?{
?19?????? printf("please input char:\n");
?20?????? fgets(buffer,MAX_BUF_SIZE+1,stdin);
?21?????? sendto(sockfd,buffer,strlen(buffer),0,(structsockaddr *)addr,len);
?22?????? bzero(buffer,MAX_BUF_SIZE);
?23??? }
?24 }
?25
?26
?27 int main(int argc,char**argv)
?28 {
?29??? int sockfd;
?30?? ?struct sockaddr_in addr;
?31??? struct hostent*host;
?32
?33??? if(argc!=2)
?34??? {
?35?????? fprintf(stderr,"Usage:%s server_ip\n",argv[0]);
?36?????? exit(1);
?37??? }
?38
?39??? if((host=gethostbyname(argv[1]))==NULL)
?40??? {
?41?????? fprintf(stderr,"Gethostname error\n");
?42?????? exit(1);
?43??? }
?44
?45 //socket

?46?? ?sockfd=socket(AF_INET,SOCK_DGRAM,0);
?47??? if(sockfd<0)
?48??? {?
?49?????? fprintf(stderr,"Socket Error:%s\n",strerror(errno));
?50?????? exit(1);
?51??? }
?52
?53 //ip port

?54??? bzero(&addr,sizeof(structsockaddr_in));
?55??? addr.sin_family=AF_INET;
?56??? addr.sin_port=htons(SERVER_PORT);
?57??? /* if(inet_aton(argv[1],&addr.sin_addr)<0)
?58??? {
?59??? fprintf(stderr,"IP error:%s\n",strerror(errno));
?60??? exit(1);
?61??? } */

?62??? addr.sin_addr=*((structin_addr *)host->h_addr);
?63?
?64
?65??? udpc_requ(sockfd,&addr,sizeof(structsockaddr_in));
?66??? close(sockfd);
?67 }

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

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

相關文章

MFC 雙擊控件 提示重載函數已存在

&#xfeff;&#xfeff;VS2013 界面雙擊按鈕控件&#xff0c;提示重載函數已存在&#xff0c;一般情況下&#xff0c;雙擊控件都是可以跳到代碼處的&#xff0c;為什么現在不能了&#xff1f; 這涉及到VS2013的自動生成問題 。 原因&#xff1a;雙擊控件跳到代碼處時&#x…

PHP常用函數總結

數學函數1.abs(): 求絕對值$abs abs(-4.2); //4.2 數字絕對值數字2.ceil(): 進一法取整echo ceil(9.999); // 10 浮點數進一取整3.floor(): 舍去法取整echo floor(9.999); // 9 浮點數直接舍去小數部分4.fmod(): 浮點數取余5.pow(): 返回數的n次方echo pow(-1, 20); // 1 基礎…

C#指定窗口顯示位置的方法

小哥哥小姐姐覺得有用點個贊唄&#xff01; C#指定窗口顯示位置的方法 1.使用StartPosition MainForm mainform; mainformnew MainForm (); dlgCtrl.StartPosition FormStartPosition.Manual;下面是FormStartPosition里邊的定義與解釋 // 指定窗體的初始位置。public …

OpenFileDialog對話框Filter屬性

OpenFileDialog對話框的Filter屬性說明&#xff1a; 首先說明一個示例&#xff0c;分析一下Filter屬性的構成&#xff1a;“ Excel文件|*.xls ”&#xff0c;前面的“Excel文件”成為標簽&#xff0c;是一個可讀的字符串&#xff0c;可以自定定義&#xff0c;“|*.xls”是篩選器…

c++中的::符

&#xfeff;&#xfeff;::是域運算符&#xff0c;一個用法是&#xff0c;如果在局部有一個變量n&#xff0c;還有一個全局變量n&#xff0c;即兩個同名&#xff0c;你要想訪問全局的就要寫::n,寫n就是局部變量.另外一個就是控制命名空間&#xff0c;例如C中的cin和cout屬于st…

x264_param_default

void x264_param_default( x264_param_t *param ) { /* 開辟內存空間*/ memset( param, 0, sizeof( x264_param_t ) ); /* CPU自動檢測 */ param->cpu x264_cpu_detect(); param->i_threads X264_THREADS_AUTO; /* 并行編碼線程為0 */ param->b_determini…

MySQL基礎原創筆記(一)

對表的增刪改操作&#xff1a; 創建表&#xff1a; create table student ( id int primary key auto_increment, name varchar(10) character set utf8 not null, sex char(2) default ‘M’, constraint fk_student_score foreign key(id) references score(id)…

C# 修改項目文件夾名稱完全版

目錄步驟1、打開項目&#xff0c;修改文件名稱2、更改命名空間名稱3、在解決方案中用txt1000替換所有test5004、使用記事本打開項目文件&#xff08;.sln文件&#xff09;修改路徑5、更改項目文件夾名稱6、刪除之前的殘留文件7、大功告成&#xff01;&#xff01;&#xff01;&…

js中遍歷注冊事件時索引怎么獲取

注意&#xff1a;這種寫法&#xff0c;是有問題的。注冊事件是在頁面加載完畢以后就完成了&#xff0c;但此時并沒有觸發事件。事件觸發是由用戶在頁面上點擊時才會觸發&#xff0c;所以說當用戶點擊時&#xff0c;才會執行事件處理函數&#xff0c;那么此時的i已經變成了4&…

spring 優點

spring 的優點&#xff1f;1.降低了組件之間的耦合性 &#xff0c;實現了軟件各層之間的解耦 2.可以使用容易提供的眾多服務&#xff0c;如事務管理&#xff0c;消息服務等 3.容器提供單例模式支持 4.容器提供了AOP技術&#xff0c;利用它很容易實現如權限攔截&#xff0c;運行…

模式對話框與非模式對話框的區別

&#xfeff;&#xfeff;模式對話框就是不處理它就沒法處理父窗口,而非模式對話框就是不用先處理此對話框也可以處理父窗口.例子:在桌面上右擊我的電腦,選擇屬性,彈出系統屬性窗口,點擊下面的技術支持,彈出技術支持信息,現在再對系統屬性窗口進行操作就操作不了,這種叫做模式對…

FFMpeg框架代碼閱讀

簡介FFmpeg是一個集錄制、轉換、音/視頻編碼解碼功能為一體的完整的開源解決方案。FFmpeg的開發是基于Linux操作系統&#xff0c;但是可以在大多數操作系統中編譯和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多種編碼&#xff0c;AVI、MPEG、OGG、Matroska、ASF等90…

C#DotNetBar TabControl將水平標簽設置成豎直

小哥哥小姐姐覺得有用點個贊唄&#xff01; 首先選中整個TabControl控件 更改屬性&#xff1a; 完成

WCF調試異常信息:ServiceHost 僅支持類服務類型

“/CommonHelpServices”應用程序中的server錯誤。ServiceHost 僅支持類服務類型。說明: 運行當前 Web 請求期間&#xff0c;出現未經處理的異常。請檢查堆棧跟蹤信息&#xff0c;以了解有關該錯誤以及代碼中導致錯誤的出處的具體信息。異常具體信息: System.ArgumentException…

使用 Drone 構建 Coding 項目

2019獨角獸企業重金招聘Python工程師標準>>> 使用 Drone 構建 Coding 項目 Drone 是一個輕量級的持續集成工具。它具備許多現代持續集成工具的特性&#xff1a;輕巧&#xff08;Docker 鏡像不到 10M&#xff09;、部署方便&#xff08;docker-compose 一鍵部署&…

C++類的構造函數 后單冒號加基類 例如:CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) 比如兩個類 class A{A(int *x);...}class B : public A{B(int *x);...}然后B在構造的時候 B::B(int *x) : A(x){...}B是A的子類&#xff0c;B類對象在構造過程中必須先構造出一個A類對象&#xff0c;而A類的構造函數需要一…

C#InI文件讀寫剖析

C#InI文件讀寫剖析 1.讀取ini文件 StringBuilder stringBuilder new StringBuilder();GetPrivateProfileString(section, key, "err", stringBuilder, 1024, filePath);para_value stringBuilder.ToString();GetPrivateProfileString( LPCTSTR lpAppName, //配置文…

bzoj1385: [Baltic2000]Division expression

歐幾里得算法。可以發現規律&#xff0c;a[2]作為分母&#xff0c;其他作為分子&#xff0c;必定是最好的選擇。判斷是否為整數即可。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep(…

成員變量 局部變量 類變量

成員變量和局部變量的區別 成員變量&#xff1a; 1、成員變量定義在類中&#xff0c;在整個類中都可以被訪問。 2、成員變量隨著對象的建立而建立&#xff0c;隨著對象的消失而消失&#xff0c;存在于對象所在的堆內存中。 3、成員變量有默認初始化值。 局部變量&#xff1a; 1…

從DevOps到Cloud Native,應用上云姿勢全解鎖

本文由網易云 發布作者&#xff1a;林帆序文伴隨著IaaS、PaaS等云端基礎設施技術的成熟&#xff0c;“應用上云”成為許多企業軟件部門的心頭大事。通過把傳統軟件系統搬到云上&#xff0c;一方面可以讓業務方獲得更多的資源靈活性&#xff0c;另一方面也可以緩解運營方的成本壓…