堪稱網路程式設計的經典之作,不過往作者竟然年過半百再多一些就西去,不勝令人欷噓,雖然現在網路程式設計工具之多,不過這兩部經典還是有許多可以借鏡的地方
今天就來複習一下吧(如果想學習如何寫C網路程式,我想讀者請放棄,因為我並不打算解釋API),首先是server,只是單純的回傳一個字串給client
值得注意的是在bind的第二個參數型態為
struct sockaddr{
unisgned short as_family;
char sa_data[14];
};
但是一般都用這個型態來替代
struct sockaddr_in{
unsigned short sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
}
我想這真的是因為一些相容性的關係,不然真的是只會造成程式設計師的困擾,因為還要處理一堆轉型的問題
話說網路發展剛開始,網路資源遠比程式設計師"值錢"的多阿Orz
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LISTENQ 10
int main(void){
int listenfd,connectfd;
struct sockaddr_in servaddr;
char string[]="Hello~";
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(8188);
bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
listen(listenfd,LISTENQ);
connectfd=accept(listenfd,NULL,NULL);
write(connectfd,string,strlen(string));
close(listenfd);
return 0;
}