资源简介
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
- 上一篇:八木天线制作方法,用于接收无线路由等
- 下一篇:MPRG8960.hex
相关资源
- windows网络编程__罗莉琴__人民邮电出版
- 网络编程实用教程
- 网络编程socket文件图片等传送
- 网络编程实用教程第二版_各章的源程
- unix网络编程英文版第三版pdf
- Linux网络编程-网络基础-socket编程-高并
- UNIX网络编程卷1(第三版 英文版)
- 原始套接字Sniffer程序
- 用socket网页
- 网络编程实用教程(第二版)-源代码
- PiggyXP完成端口(CompletionPort)详解
- 网络调试助手-全平台
- socket网络编程服务端程序支持多客户
- Windows网络编程(第二版)
- UNIX网络编程 卷1(第三版 英文版)
- 网络课程设计购物网站
- Windows网络编程 带书签 第二版.pdf
- 网络编程实用教程.pdf
- socket网络编程,可以实现聊天系统,
- Linux网络编程+RouterOS_3.0中文教程+Rou
- 网络编程实用教程ppt+源码.rar
- TCP/IP高级编程
- UNIX Network Programming Volume 1 Third Editio
- 简单的聊天程序 网络编程 UDP TCP
- Windows网络编程第二版源码(补充材料
- TCP IP协议与网络编程 任泰明
- Visual_C__.NET程序设计实用教程第2版源
- Linux网络编程-网络基础-socket编程-高并
- 黑马_Linux网络编程-网络基础-socket编程
- 仿QO游戏大厅之网络五子棋
评论
共有 条评论