-
大小: 3KB文件類型: .zip金幣: 2下載: 1 次發(fā)布日期: 2021-05-16
- 語言: 其他
- 標(biāo)簽: 網(wǎng)絡(luò)編程??
資源簡(jiǎn)介
Linux網(wǎng)絡(luò)編程(四)——epoll+多線程實(shí)現(xiàn)簡(jiǎn)單的聊天(linux 服務(wù)器端 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);//發(fā)送信息函數(shù)
unsigned?WINAPI?RecvMsg(void?*?arg);//接受信息函數(shù)
void?ErrorHandling(char?*?msg);//錯(cuò)誤返回函數(shù)
int?haveread?=?0;
char?NAME[50];//[名字]
char?msg[BUF_SIZE];//信息
int?main(int?argc?char?*argv[])
{
printf(“請(qǐng)輸入網(wǎng)名:“);
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);//等待線程結(jié)束
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;//發(fā)送錯(cuò)誤
}
}
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)//讀取錯(cuò)誤
return?-1;
if?(str_len?==?0)return?0;//讀取結(jié)束
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);
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????3536??2017-06-13?14:38??服務(wù)器端.cpp
?????文件????????2683??2017-06-12?15:09??客戶端.cpp
- 上一篇:八木天線制作方法,用于接收無線路由等
- 下一篇:MPRG8960.hex
評(píng)論
共有 條評(píng)論