由於單程序伺服器只能處理乙個客戶端,所以引入了多執行緒,這樣便可以處理多客戶端,同時還可以鍛鍊多執行緒的一些知識,並加以鞏固網路程式設計。
在這裡我使用的環境是linux,windows的不能執行這個程式。
#ifndef header_h
#define header_h#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define server_ip "127.0.0.1"
#define client_ip "127.0.0.1"
#define server_port 8887
#endif
//header_h
#include "config.h"//
client information
struct
clientinfo;
void *delclient(void *arg)
for(size_t i = 0; i < strlen(buf)+1;i++)
write(client->socke,buf,n);
}}int
main()
//init addrser
inet_pton(af_inet,server_ip,&addrser.sin_addr.s_addr);
addrser.sin_family =af_inet;
addrser.sin_port =htons(server_port);
//bind
if(0 != bind(sockser,(sockaddr*)&addrser,sizeof
(addrser)))
//listen
if(0 !=listen(sockser,client_num))
//acctept
while (1
)
//init client msg to thread
memcpy(&clientinfo[i].sockclient,&addrcli,sizeof
(addrcli));
clientinfo[i].socke =sockclient;
//create thread
pthread_t pid;
pthread_create(&pid,null,delclient,(void*)&clientinfo[i]);
pthread_detach(pid);
}return0;
}
//nc 伺服器ip位址 伺服器端口號
nc 127.0.0.1
8887
也可以使用自己寫的:
//client.c
#include
"config.h
"int
main()
addrser.sin_family =af_inet;
addrser.sin_port =htons(server_port);
inet_pton(af_inet,client_ip,&addrser.sin_addr.s_addr);
if( 0 != connect(sockser,(sockaddr*)&addrser,sizeof
(sockaddr)))
char buf[100
];
while(1
)}
多執行緒伺服器
posix執行緒庫 a 與執行緒有關的函式都構成了乙個完整的系列,絕大多數函式的名字都是以 pthread 打頭的。b 要使用這些庫函式,要引入標頭檔案。c 鏈結這些執行緒庫函式時要使用編譯命令的 lpthread 選項。int pthread create pthread t thread,con...
多執行緒時間伺服器
include stdafx.h include include include include include define port 8080 int x 1 void error char str dword winapi new client proc lpvoid lpparam prin...
ACE多執行緒伺服器
ace adaptive communication environment 它是乙個物件導向的 跨平台的 開放原始碼的網路程式設計基礎設施框架。ace 是由加利福尼亞大學irvine分校的douglas c.schmidt 博士主導開發的,是一種跨平台可編譯的網路程式設計api,並隨後在工業界中發...