簡單的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是乙個指向要傳...