linux下c語言tcp通訊

2021-07-05 11:00:03 字數 2347 閱讀 1622

tcp/ip 協議組:

應用層  (ftp / smtp / http)

傳輸層   (tcp / udp)

網路層(ip icmp igmp)

物理層(網路介面層、鏈路層) (乙太網、令牌環網、fddi)

例項:服務端

#include #include #include #include #include #include #include #include #define serverport 3333

#define backlog 10

int main(int argc, char const *argv)

//bzero clean

bzero(&my_addr,sizeof(struct sockaddr_in));

my_addr.sin_family=af_inet;

my_addr.sin_port=htons(serverport);

my_addr.sin_addr.s_addr=inaddr_any;

// bzero(&(my_addr.sin_zero),8);

//可以在這裡bzero只清零sin_zero

// 將套接字繫結到伺服器的網路位址上

if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)

//監聽客戶端連線請求

if (listen(sockfd,backlog)==-1)

while(1)

printf("received ip:%s\n",inet_ntoa(remote_addr.sin_addr));

if (!fork())//建立子程序

while(1)//傳送資訊

if (send(client_fd,str,strlen(str),0)==-1)

}}close(client_fd);

} close(sockfd);

exit(0);

}

客戶端

#include #include #include #include #include #include #include #include #define servport 3333

#define maxdatasize 100 /*每次最大資料傳輸量 */

int main(int argc, char const *argv)

if((host=gethostbyname(argv[1]))==null)

if ((sockfd=socket(af_inet,sock_stream,0))==-1)

bzero(&serv_addr,sizeof(struct sockaddr_in));

serv_addr.sin_family=af_inet;

serv_addr.sin_port=htons(servport);

serv_addr.sin_addr = *((struct in_addr *)host->h_addr);

// bzero(&(serv_addr.sin_zero),8);

//connect server

if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)

//獲取發來的位元組數

if((recvbytes=recv(sockfd,buf,maxdatasize,0))==-1)

buf[recvbytes]='\0';

printf("received:%s\n", buf);

//connected after

while(1)

if (!recvbytes)

buf[recvbytes]='\0';

printf("received:%s\n", buf);

}close(sockfd);

exit(0);

}

注意:

1、客戶端.sin_addr和服務端的.sin_addr.s_addr配置。

2、網域名稱的解析和直接輸入ip。

使用:server:./tcps執行

client:./tcpc 192.168.1.x執行

如果有多個客戶端連線,則服務端傳過去的資料,會先給第乙個連線的,

後面連線的要等待上一次連線的程序結束。

struct sockaddr與struct sockaddr_in的區別和聯絡

參考:

linux下C 實現TCP通訊

udp教程可以檢視 tcp通訊協議鏈結過程如下圖所示。由上圖可看出 tcp的伺服器需要bind listen accept tcp的客戶端需要connect 伺服器 如下 include include include include include include include include ...

Linux下的TCP通訊

linux下的tcp通訊 今天我們介紹如何編寫linux下的tcp程式,關於udp程式我還沒學。伺服器端的步驟如下 1.socket 建立乙個socket 2.bind 將這個socket繫結在某個檔案上 af unix 或某個埠上 af inet 我們會分別介紹這兩種。3.listen 開始監聽 ...

Linux下C語言串列埠通訊

最近在做乙個gps專案,第一部分是將開發板和gps用串列埠通訊,接受gps上傳來的資料。linux下所有的裝置都是以檔案形式儲存的,串列埠也是。整個串列埠通訊的流程圖為 所用到的標頭檔案為 include include include include include include include...