這是乙個非常簡單的通訊程式,不需要什麼前奏來說明這個問題,可以直接來看程式的實現,首先是伺服器端的程式:
int main(int argc, char **argv)
slisten = socket(af_inet, sock_stream, ipproto_ip);
if (slisten == socket_error)
if (binte***ce)
}else
local.sin_family = af_inet;
local.sin_port = htons(iport);
if (bind(slisten,
(struct sockaddr*)&local,
sizeof(local)) == socket_error)
listen(slisten, 8);
while(1)
printf("acceped client: %s:%d/n",
inet_ntoa(client.sin_addr),
ntohs(client.sin_port));
hthread = createthread(null,
0,clientthread,
(lpvoid)sclient,
0,&dwthread);
if (hthread == null)
closehandle(hthread);
}closesocket(slisten);
wsacleanup();
return 0;
}這是主程式,首先是乙個驗證引數的過程,程式提供了三種引數格式:-p:x說的是監聽的埠號,-i:str說的是監聽的ip,這只適用於一台主機多個ip的情況,-o說的是伺服器只接收訊息,而不傳送回應訊息,驗證引數的**如下:
void validateargs(int argc, char **argv)}}
}驗證完引數之後,就開一般的tcp/ip通訊的步驟了,即首先建立乙個socket,然後繫結在伺服器的某個埠上,然後listen進行監聽,最後是accept接收到乙個連線,就建立乙個單獨的執行緒專門與用這個連線和某個客戶端進行通訊,來看看通訊線程的入口函式:
dword winapi clientthread(lpvoid lpparam)
szbuff[ret] = '/0';
printf("recv: %s/n", szbuff);
if (!brecvonly)
nleft -=ret;
idx +=ret;}}
}return 0;
}這就是乙個通訊線程函式,用recv接收資料,用send傳送資料,不是很難。
下面來看看客戶端的實現:
void validateargs(int argc, char *argv)}}
}int main(int argc, char *argv)
strcpy(szmessage, default_message);
sclient = socket(af_inet, sock_stream, ipproto_tcp);
if (sclient == invalid_socket)
server.sin_family = af_inet;
server.sin_port = htons(iport);
server.sin_addr.s_addr = inet_addr(szserver);
if (server.sin_addr.s_addr == inaddr_none)
copymemory(&server.sin_addr,
host->h_addr_list[0],
host->h_length);
}if (connect(sclient,
(struct sockaddr*)&server,
sizeof(server))
== socket_error)
for (i = 0; i < dwcount; i++)
else if (ret == socket_error)
printf("send %d bytes/n", ret);
if (!bsendonly)
else if (ret == socket_error)
szbuffer[ret] = '/0';
printf("recv [%d bytes]: %s/n", ret, szbuffer);}}
closesocket(sclient);
wsacleanup();
return 0;
}客戶端的程式非常的簡單,建立乙個socket,然後connect伺服器,就可以進行recv和send了,不要建立執行緒,很輕鬆的就可以完成通訊了,當然更好的情況是將客戶端的connect單獨放在乙個執行緒裡面進行,在伺服器端,最後也是將accept單獨放在乙個執行緒裡面進行,這樣的話可以更好的響應使用者的操作了。
QT多執行緒伺服器 客戶端
客戶端效果展示 h ifndef dialog h define dialog h include include include include timeserver.h include class dialog public qdialog endif dialog h cpp include ...
客戶端 伺服器程式設計模型
客戶端和伺服器是程序,不是主機。客戶端 伺服器模型中的基本操作是事務。乙個客戶端 伺服器事務由四步組成 1.當乙個客戶端需要服務時,它向伺服器傳送乙個請求,發起乙個事務。例如,當web瀏覽器需要乙個檔案時,它就傳送乙個請求給web伺服器。2.伺服器收到請求後,解釋它,並以適當的方式操作它的資源。例如...
Linux socket程式設計 伺服器 客戶端
根據網上的程式修改的,感謝!另外有個linux網路除錯工具,tcpdump,類似xp上的wireshark,使用介紹 伺服器端 客戶機端 可以實現,客戶機一直傳送,伺服器一直接收資料,原理網上的程式是只發一次。現在這個還有個問題,退出只能ctrl c,如果客戶機先退出,伺服器一直接收資料,不知道什麼...