資源簡介
本次實驗利用TCP/IP, 語言環境為 C/C++
利用套接字Socket編程,以及線程處理,
實現Server/CLient 之間多人的聊天系統的基本功能。

代碼片段和文件信息
/*?TCPClient.cpp??--?用于傳遞struct?*/
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define????BUFLEN????????2000??????????????????//?緩沖區大小
#define?WSVERS????????MAKEWORD(2?0)????????//?指明版本2.0?
#pragma?comment(lib“ws2_32.lib“)?????????//?指明winsock?2.0?Llibrary
/*------------------------------------------------------------------------
?*?main?-?TCP?client?for?DAYTIME?service
?*------------------------------------------------------------------------
?*/
????
????SOCKET????socksockets[100]?=?{NULL};??????????????????????????/*?socket?descriptor????????????*/
//????int????cc;????????????????????????????????/*?recv?character?count????????????*/
????char????*packet?=?NULL;???????????????/*?buffer?for?one?line?of?text????*/
????char?*pts*input;
????HANDLE?hThread;
????unsigned?threadID;
unsigned?int?__stdcall?Chat(PVOID?PM?)?
{
???????time_t????now;
??????(void)?time(&now);
???????pts?=?ctime(&now);
???????char?buf[2000];
while(1)
{
????int?cc?=?recv(sock?buf?BUFLEN?0);???//cc為接收的字符數
????if(cc?==?SOCKET_ERROR||?cc?==?0)
????{
????????printf(“Error:?%d.----“GetLastError());
????????printf(“與服務器斷開連接!\n“);
????????CloseHandle(hThread);
????????(void)closesocket(sock);
????????break;
????}
????else?if(cc?>?0)?
????{
????//????buf[cc]?=?‘\0‘;
????????printf(“%s\n“buf);
????//????printf(“輸入數據(exit退出):??\n“);
????}?????
}
????return?0;
}
int?main(int?argc?char?*argv[])
{
????time_t????now;
?????(void)?time(&now);
???????pts?=?ctime(&now);
????char????*host?=?“127.0.0.1“;????????/*?server?IP?to?connect?????????*/
//????char????*host?=?“172.18.33.155“;
//????char????*host?=?“172.18.33.93“;
//????char????*host?=?“172.18.187.1“;
????char?*service?=?“5050“;??????????/*?server?port?to?connect???????*/
//????char?*service?=?“50000“;
????struct??sockaddr_in?sin;????????????/*?an?Internet?endpoint?address????*/
????WSADATA?wsadata;
????WSAStartup(WSVERS?&wsadata);???????/*?啟動某版本Socket的DLL????????*/????????
????memset(&sin?0?sizeof(sin));
????sin.sin_family?=?AF_INET;
????sin.sin_port?=?htons((u_short)atoi(service));????//atoi:把ascii轉化為int.?htons:主機序(host)轉化為網絡序(network)?s--short
????sin.sin_addr.s_addr?=?inet_addr(host);???????????//如果host為域名,需要先用函數gethostbyname把域名轉化為IP地址
????sock?=?socket(PF_INET?SOCK_STREAM0);
????connect(sock?(struct?sockaddr?*)&sin?sizeof(sin));
????printf(“\t\t\t\tChat?多人聊天程序?\n“);
????printf(“\t\t\t\t???????(Client)?\n“);
????hThread?=?(HANDLE)_beginthreadex(NULL?0Chat?NULL?0?&threadID);????
????printf(“?\t\t\t\t?【您可以自由發言】\n\n“);
while(1)
{
????char?buf1[2000];
????
????//?????scanf(“%s“&buf1);
????
?????????gets(buf1);
?????????if(!strcmp(buf1?“exit“))
?????????????goto?end;
????????(void)?send(sockbuf1?sizeof(buf1)?0);
????????(void)?time(&now);
????????pts?=?ctime(&now);
???????printf(“?發送成功!?------時間:?%
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????3352??2017-10-29?10:11??socket多人聊天\client2.cpp
?????文件????????5310??2017-10-29?09:58??socket多人聊天\server2.cpp
?????文件?????????275??2017-10-29?10:32??socket多人聊天\提示.txt
- 上一篇:12864顯示漢字.zip
- 下一篇:經典差分進化算法的C++語言實現
評論
共有 條評論