Linux網路程式設計之echo server的實現

2021-07-16 04:22:22 字數 2272 閱讀 5904

網路程式設計第一步,先實現乙個echo server

乙個echo server程式包含兩部分

* 客戶端

* 服務端

這裡,服務端相對於客戶端的**要多一些。

這裡簡單說一下**結構:

1. socket

2. bind

3. listen

4. accept

5. 迴圈讀寫

6. 關閉連線和套接字

socket

connect

迴圈讀寫

關閉套接字

下面貼**(c語言實現):

server.c

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define err_exit(m) \

dowhile(0)

int main(int argc, char *argv)

struct sockaddr_in servaddr;

memset(&servaddr,0,sizeof(servaddr));

servaddr.sin_family=af_inet;

servaddr.sin_port=htons(5678);

servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");

/*servaddr.sin_addr.s_addr=htonl(inaddr_any);

inet_aton("127.0.0.1",&servaddr.sin_addr);

*/if(bind(socket_fd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)

err_exit("bind");

if(listen(socket_fd,somaxconn)==-1)

err_exit("listen");

struct sockaddr_in peeraddr;

memset(&peeraddr,0,sizeof(peeraddr));

socklen_t len=sizeof(peeraddr);

int conn;

if((conn=accept(socket_fd,(struct sockaddr*)&peeraddr,&len))==-1)

err_exit("accept");

char buf[1024]={};

while(1)

close(conn);

close(socket_fd);

return

0;}

客戶端(c語言實現)

client.c

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define err_exit(m)\

do while(0)

int main(int argc, char *argv)

int socket_fd;

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

struct sockaddr_in servaddr;

servaddr.sin_family=af_inet;

servaddr.sin_port=htons(5678);

servaddr.sin_addr.s_addr=inet_addr(argv[1]);

if(connect(socket_fd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)

char sendbuf[1024]={};

char recvbuf[1024]={};

while(fgets(sendbuf,sizeof(sendbuf),stdin)!=null)

close(socket_fd);

return

0;}

注:

Linux網路程式設計之廣播

1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...

Linux網路程式設計之廣播

1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...

linux網路程式設計之Socket

一.socket socket可看作是使用者程序與核心網路協議的程式設計介面.socket可用於本機程序間的通訊,也可用於網路上不同主機間的程序通訊.下圖顯示的是各種網路協議的位址格式 1.struct socketaddr 通用位址結構 通過獲取某種socketaddr結構體的首位址,不需要知道具...