linux下socket程式設計

2021-08-14 22:41:31 字數 3630 閱讀 6432

簡單的linux下socket程式設計,分別基於tcp和udp協議實現的簡單程式

linux下socket程式設計可以概括為以下幾個函式的運用: 流程

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

if(bind(server_sockfd,(

struct

sockaddr *)&my_addr,

sizeof

(struct

sockaddr))<0)  

/*監聽連線請求--監聽佇列長度為5*/

if(listen(server_sockfd,5)<0)  

;  sin_size=sizeof

(struct

sockaddr_in);  

/*等待客戶端連線請求到達*/

if((client_sockfd=accept(server_sockfd,(

struct

sockaddr *)&remote_addr,&sin_size))<0)  

printf("accept client %s/n"

,inet_ntoa(remote_addr.sin_addr));  

len=send(client_sockfd,"welcome to my server/n"

,21,0);

//傳送歡迎資訊

/*接收客戶端的資料並將其傳送給客戶端--recv返回接收到的位元組數,send返回傳送的位元組數*/

while

((len=recv(client_sockfd,buf,bufsiz,0))>0))  

}  /*關閉套接字*/

close(client_sockfd);  

close(server_sockfd);  

return

0;  

}  

client**

[cpp]view plain

copy

print?

#include 

#include 

#include 

#include 

#include 

intmain(

intargc, 

char

*argv)  

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

if(connect(client_sockfd,(

struct

sockaddr *)&remote_addr,

sizeof

(struct

sockaddr))<0)  

printf("connected to server/n"

);  

len=recv(client_sockfd,buf,bufsiz,0);//接收伺服器端資訊

buf[len]='/0'

;  printf("%s"

,buf); 

//列印伺服器端資訊

/*迴圈的傳送接收資訊並列印接收資訊(可以按需傳送)--recv返回接收到的位元組數,send返回傳送的位元組數*/

while

(1)  

/*關閉套接字*/

close(client_sockfd);  

return

0;  

}  

流程

server**

[cpp]view plain

copy

print?

#include 

#include 

#include 

#include 

#include 

intmain(

intargc, 

char

*argv)  

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

if(bind(server_sockfd,(

struct

sockaddr *)&my_addr,

sizeof

(struct

sockaddr))<0)  

sin_size=sizeof

(struct

sockaddr_in);  

printf("waiting for a packet.../n"

);  

/*接收客戶端的資料並將其傳送給客戶端--recvfrom是無連線的*/

if((len=recvfrom(server_sockfd,buf,bufsiz,0,(

struct

sockaddr *)&remote_addr,&sin_size))<0)  

printf("received packet from %s:/n"

,inet_ntoa(remote_addr.sin_addr));  

buf[len]='/0'

;  printf("contents: %s/n"

,buf);  

/*關閉套接字*/

close(server_sockfd);  

return

0;  

}  

client**

[cpp]view plain

copy

print?

#include 

#include 

#include 

#include 

#include 

intmain(

intargc, 

char

*argv)  

strcpy(buf,"this is a test message"

); // 傳送的內容

printf("sending: '%s'/n"

,buf);   

sin_size=sizeof

(struct

sockaddr_in);  

/*向伺服器傳送資料報*/

if((len=sendto(client_sockfd,buf,strlen(buf),0,(

struct

sockaddr *)&remote_addr,

sizeof

(struct

sockaddr)))<0)  

/*關閉套接字*/

close(client_sockfd);  

return

0;  

}  

在linux下用gcc執行即可

原文:

linux下socket程式設計

一 什麼是socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面。socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4 ipv6。struct sockaddr in...

linux下socket程式設計

作為乙個嵌入式開發者,在實際的研發專案中,常常需要編寫socket網路程式設計介面,提供給軟體開發人員。下面將提供乙個常用的 模板 客戶端的功能可以用微控制器多功能除錯助手進行驗證 include include include include include include include def...

Linux下Socket程式設計 二

亞嵌 連線建立 資料傳輸 send 和recv 這兩個函式用於面向連線的socket上進行資料傳輸。send 函式原型為 int send int sockfd,const void msg,int len,int flags sockfd是你想用來傳輸資料的socket描述符 msg是乙個指向要傳...