網路socket程式設計指南

2021-04-20 00:51:55 字數 3240 閱讀 5631

在linux下寫了個小的 socket程式,分為客戶端和伺服器端,服務端開乙個埠(2000),做為乙個daemon,等待客戶的連線請求.一旦有客戶連線,伺服器端列印出客 戶端的ip位址和埠,並且向伺服器端傳送歡迎資訊和時間.下面是服務端的**(tcpserver.c).由於這只是個簡單的程式,所以只用了單執行緒實 現!

/**

* tcp server program, it is a ****** example only.

* zhengsh 200520602061 2

* when client connect to server, send a welcome message and timestamp in server.

*/

#include

#include

#include

#include

#include

#include

#include

#define server_port 20000 // define the defualt connect port id

#define length_of_listen_queue 10 //length of listen queue in server

#define buffer_size 255

#define welcome_message "welcome to connect the server. "

int main(int argc, char **argv)

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_port = htons(server_port);

servaddr.sin_addr.s_addr = htons(inaddr_any);

if (bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)

if (listen(servfd,length_of_listen_queue) < 0)

while (1)

strcpy(buf,welcome_message);

//inet_ntop(inet_addrstrlen,cliaddr.sin_addr,buf,buffer_size);

printf("from client,ip:%s,port:%d/n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));

timestamp = time(null);

strcat(buf,"timestamp in server:");

strcat(buf,ctime(×tamp));

send(clifd,buf,buffer_size,0);

close(clifd);

}//exit

close(servfd);

return 0;

}

客戶每次用乙個隨機的埠連線伺服器,並接收來自伺服器的歡迎資訊

,然後列印出來(tcpclient).執行的時候接受乙個引數,也就是伺服器的ip位址.

/* tcp client program, it is a ****** example only.

* zhengsh 200520602061 2

* connect to server, and echo a message from server.

*/

#include

#include

#include

#include

#include

#include

#define server_port 20000 // define the defualt connect port id

#define client_port ((20001+rand())%65536) // define the defualt client port as a random port

#define buffer_size 255

#define reuqest_message "welcome to connect the server./n"

void usage(char *name)

int main(int argc, char **argv)

if ((clifd = socket(af_inet,sock_stream,0)) < 0)

srand(time(null));//initialize random generator

bzero(&cliaddr,sizeof(cliaddr));

cliaddr.sin_family = af_inet;

cliaddr.sin_port = htons(client_port);

cliaddr.sin_addr.s_addr = htons(inaddr_any);

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family = af_inet;

inet_aton(argv[1],&servaddr.sin_addr);

servaddr.sin_port = htons(server_port);

//servaddr.sin_addr.s_addr = htons(inaddr_any);

if (bind(clifd,(struct sockaddr*)&cliaddr,sizeof(cliaddr))<0)

if (connect(clifd,(struct sockaddr*)&servaddr, socklen) < 0)

length = recv(clifd,buf,buffer_size,0);

if (length < 0)

printf("from server %s :/n/t%s ",argv[1],buf);

close(clifd);

return 0;

} 程式在fedora core 4下通過編譯,有幾個warining.但是不影響.

網路程式設計 Socket程式設計

一 網路部分 1.ip 2.埠號 在網路協議中使用埠號識別主機上不同的程序,不同的埠對應於不同的服務 應用程式 3.協議 tcp二 socket部門socket通訊基本流程圖 根據socket通訊基本流程圖,總結通訊的基本步驟 伺服器端 第一步 建立乙個用於監聽連線的socket對像 第二步 用指定...

socket網路程式設計

首先認識乙個表示主機資訊的結構體 struct hostent h addrtype 這是表示主機所使用的位址型別的定義,在c語言winsock2.h標頭檔案中以 af 開頭的巨集定義就是它的值。如果使用的是ipv4,則值為 af inet 如果是ipv6,值為 af inet4 h length ...

Socket網路程式設計

socket 網路程式設計 在c free中建立乙個對話方塊工程,取名socket1,建立如下檔案結構 main.h ifndef main h define main h include bool winapi main proc hwnd hwnd,uint umsg,wparam wparam...