-
大小: 3KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-06-16
- 語言: 其他
- 標(biāo)簽: 網(wǎng)絡(luò)??聊天室??程序??源代碼??
資源簡介
網(wǎng)絡(luò)聊天室程序源代碼
給大家提供的小小的一個程序,有一些問題,大家可以給我提出。運行程序時,首先啟動服務(wù)器端,然后啟動客戶端,客戶端首先將消息發(fā)送到服務(wù)器端,服務(wù)器再轉(zhuǎn)發(fā)到各個客戶端。在客戶端輸入“:”開始輸入發(fā)送的消息。

代碼片段和文件信息
#include?
#include?
#include??
#include?
using?namespace?std;
#pragma?comment(lib?“ws2_32.lib“)
#define?PORT?5150
void?DoChoose();
DWORD?WINAPI?SendThread(LPVOID?lpParameter);
SOCKET?ClientSocket;
fd_set?readfd;
char?recv_buf[1024];
struct?timeval?tv;
char?name[255];?//get?host?name
PHOSTENT?hostinfo;
int?line?=?0;?//?the?message?lines
COORD?pos;?//定義一個位置變量
int?main()
{
WSADATA?wsadata;
SOCKADDR_IN?serveraddr;
char?send_buf[512];
char?total_send[1024];
char?end[]?=?“:“;
char?ipAddr[13];
char?*ip?=?ipAddr;
char?getkey;?//?the?number?of?ip
char?key;
int?number?=?0;?//?array?number
memset(recv_buf?0x00?sizeof(recv_buf));
memset(send_buf?0x00?sizeof(send_buf));
memset(total_send?0x00?sizeof(total_send));
memset(ipAddr?0x00?sizeof(ipAddr));
//?get?server?ip?address
cout<<“Please?input?the?server‘s?IP:?“;
while?((getkey?=?cin.get())?!=?‘\n‘)
{
*ip++?=?getkey;
}
*ip?=?‘\0‘;
cout<
//Initilization?winsock
WSAStartup(MAKEWORD(2?2)?&wsadata);
if(gethostname(namesizeof(name))==0)
????{
if((hostinfo?=?gethostbyname(name)?)!=?NULL)
{
//if?get?host?name?successfully,use?inet_ntoa()?to?get?ip?address
LPCSTR?ip?=?inet_ntoa(*(struct?in_addr?*)*hostinfo->h_addr_list);
strcpy(total_send?ip);
strcat(total_send?end);
}
}
ClientSocket?=?socket(AF_INET?SOCK_STREAM?IPPROTO_TCP);
if?(ClientSocket?==?INVALID_SOCKET)
{
cout<<“create?socket?error“< exit(EXIT_FAILURE);
}
//set?server?address
serveraddr.sin_family?=?AF_INET;
serveraddr.sin_port?=?htons(PORT);
serveraddr.sin_addr.s_addr?=?inet_addr(ipAddr);
//connect?to?server
if?(connect(ClientSocket?(SOCKADDR?*)&serveraddr?sizeof(serveraddr))?==?SOCKET_ERROR)
{
cout<<“Connect?Error“< exit(EXIT_FAILURE);
}
else
{
cout<<“Connect?successfully!“< }
CreateThread(NULL?0?SendThread?NULL?0?NULL);?
while?(1)
{
if?(getch()?==?‘:‘)
{
//?get?key?value
memset(send_buf?0x00?sizeof(send_buf));
//?set?new?position?of?cursor
pos.X=0;
pos.Y=24?+?line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE)pos);
while?((key?=?cin.get())?!=?‘\n‘)
{
send_buf[number++]?=?key;
}
//?clear?the?input?line
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE)pos);
cout<<“????????????????????????????????????????????????????????????????????“;
//?send?message
strcat(total_send?send_buf);
send(ClientSocket?total_send?sizeof(total_send)?0);
memset(send_buf?0x00?sizeof(send_buf));
memset(total_send?0x00?sizeof(total_send));
number?=?0;
}
else
{
continue;
}
}
closesocket(ClientSocket);
WSACleanup();
return?EXIT_SUCCESS;
}
DWORD?WINAPI?SendThread(LPVOID?lpParameter)
{
//set?waiting?time
tv.tv_sec?=?2;
tv.tv_usec?=?0;
while?(1)
{
/
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2655??2011-08-26?14:31??server.cpp
?????文件????????3808??2011-09-03?17:04??client.cpp
評論
共有 條評論