• 大小: 3KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: 网络编程  

资源简介

Linux网络编程(四)——epoll+多线程实现简单的聊天(linux 服务器端 windows客户端)

资源截图

代码片段和文件信息

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include  
#define BUF_SIZE 1000
#define NAME_SIZE 20

#pragma comment(lib “ws2_32.lib“)  //加载 ws2_32.dll  

unsigned WINAPI SendMsg(void * arg);//发送信息函数
unsigned WINAPI RecvMsg(void * arg);//接受信息函数
void ErrorHandling(char * msg);//错误返回函数

int haveread = 0;
char NAME[50];//[名字]
char msg[BUF_SIZE];//信息

int main(int argc char *argv[])
{

printf(“请输入网名:“);
scanf(“%s“ NAME);
WSADATA wsaData;
SOCKET hSock;
SOCKADDR_IN servAdr;
HANDLE hSndThread hRcvThread;
if (WSAStartup(MAKEWORD(2 2) &wsaData) != 0)
ErrorHandling(“WSAStartup() error!“);

hSock = socket(PF_INET SOCK_STREAM 0);
memset(&servAdr 0 sizeof(servAdr));
servAdr.sin_family = AF_INET;
servAdr.sin_addr.s_addr = inet_addr(“192.168.3.122“);
servAdr.sin_port = htons(1234);

if (connect(hSock (SOCKADDR*)&servAdr sizeof(servAdr)) == SOCKET_ERROR)
ErrorHandling(“connect() error“);

puts(“Welcome to joining our chatting room!\n“);
hSndThread =
(HANDLE)_beginthreadex(NULL 0 SendMsg (void*)&hSock 0 NULL);//写线程
hRcvThread =
(HANDLE)_beginthreadex(NULL 0 RecvMsg (void*)&hSock 0 NULL);//读线程

WaitForSingleobject(hSndThread INFINITE);//等待线程结束
WaitForSingleobject(hRcvThread INFINITE);
closesocket(hSock);
WSACleanup();
system(“pause“);
return 0;
}

unsigned WINAPI SendMsg(void * arg)   // send thread main
{
SOCKET sock = *((SOCKET*)arg);
char name_msg[NAME_SIZE + BUF_SIZE];
char padd[2];
fgets(padd 2 stdin);//多余的‘\n‘
printf(“\n send message:“);
while (1)
{
{
fgets(msg BUF_SIZE stdin);
if (!strcmp(msg “q\n“) || !strcmp(msg “Q\n“))
{
closesocket(sock);
exit(0);
}
sprintf(name_msg “[%s] %s“ NAME msg);
int result;
result = send(sock name_msg strlen(name_msg) 0);
if (result == -1)return -1;//发送错误
}
}
return NULL;
}

unsigned WINAPI RecvMsg(void * arg)  // read thread main
{
SOCKET sock = *((SOCKET*)arg);
char name_msg[NAME_SIZE + BUF_SIZE];
int str_len = 0;
while (1)
{
{
str_len = recv(sock name_msg NAME_SIZE + BUF_SIZE - 1 0);
if (str_len == -1)//读取错误
return -1;
if (str_len == 0)return 0;//读取结束
name_msg[str_len] = ‘\0‘;
printf(“\n“);
strcat(name_msg “\n“);
fputs(name_msg stdout);
printf(“ send message:“);
fflush(stdout);
memset(name_msg 0 sizeof(char));
}
}
return NULL;
}

void ErrorHandling(char * msg)
{
fputs(msg stderr);
fputc(‘\n‘ stderr);
exit(1);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3536  2017-06-13 14:38  服务器端.cpp
     文件        2683  2017-06-12 15:09  客户端.cpp

评论

共有 条评论