资源简介

网络聊天室程序源代码 给大家提供的小小的一个程序,有一些问题,大家可以给我提出。运行程序时,首先启动服务器端,然后启动客户端,客户端首先将消息发送到服务器端,服务器再转发到各个客户端。在客户端输入“:”开始输入发送的消息。

资源截图

代码片段和文件信息

#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

评论

共有 条评论