簡單的伺服器
這個伺服器所做的全部工作是在流式連線上傳送字串 "hello, world!/n"。你要測試這個程式的話,可以在一台機器上執行該程式,然後 在另外一機器上登陸:
$ telnet remotehostname 3490
remotehostname 是該程式執行的機器的名字。
伺服器**:
#include
#include
#include
#include
#include
#include
#include
#include
#define myport 3490 /*定義使用者連線埠*/
#define backlog 10 /*多少等待連線控制*/
main()
my_addr.sin_family = af_inet; /* host byte order */
my_addr.sin_port = htons(myport); /* short, network byte order */
my_addr.sin_addr.s_addr = inaddr_any; /* auto-fill with my ip */
bzero(&(my_addr.sin_zero),; /* zero the rest of the struct */
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct
sockaddr))== -1)
if (listen(sockfd, backlog) == -1)
簡單的客戶程式
這個程式比伺服器還簡單。這個程式的所有工作是通過 3490 埠連線到命令列中指定的主機,然後得到伺服器傳送的字串。
客戶**:
#include
#include
#include
#include
#include
#include
#include
#include
#define port 3490 /* 客戶機連線遠端主機的埠 */
#define maxdatasize 100 /* 每次可以接收的最大位元組 */
int main(int argc, char *ar**)
if ((he=gethostbyname(ar**[1])) == null)
if ((sockfd = socket(af_inet, sock_stream, 0)) == -1)
their_addr.sin_family = af_inet; /* host byte order */
their_addr.sin_port = htons(port); /* short, network byte order */
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero),; /* zero the rest of the struct */
if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct
sockaddr)) == -1)
if ((numbytes=recv(sockfd, buf, maxdatasize, 0)) == -1)
buf[numbytes] = '/0';
printf("received: %s",buf);
close(sockfd);
return 0;
} 注意,如果你在執行伺服器之前執行客戶程式,connect() 將返回 "connection refused" 資訊,這非常有用。
TCP客戶 伺服器簡單Socket程式
建立乙個 tcp 連線時會發生下述情形 1.伺服器必須準備好接受外來的連線。這通常通過呼叫 socket bind 和 listen 這三個函式來完成,我們稱之為被動開啟。2.客戶通過呼叫 connect 發起主動開啟,這導致客戶tcp傳送乙個syn 同步 分節,標識希望連線的伺服器端口以及初始序號...
Socket建立簡單伺服器和客戶端程式
socket addressfamily,sockettype,protocoltype endpoint和ipendpoint 參考 endpoint是ipendpoint的基類,ipendpoint可以強轉為endpoint。endpoint ep endpoint iep socket三種監聽...
IOCP 簡單伺服器和客戶端
iocp client.cpp 定義控制台應用程式的入口點。include stdafx.h include include pragma comment lib,ws2 32.lib include void main if lobyte wsadata.wversion 1 hibyte wsa...