網路程式設計第一步,先實現乙個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結構體的首位址,不需要知道具...