基于UDP的socket程序,多线程操作,windows下C语言

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
#include
#include
#pragma comment(lib,"ws2_32.lib")

DWORD WINAPI ThreadProc(LPVOID lpParameter) //次线程,发消息
{
printf("请输入服务端ip地址:");//程序接收端
char ip[16]="\0";
scanf("%s",ip);

//创建socket2
SOCKET s2=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

//创建套接口
sockaddr_in tcpaddr2;
tcpaddr2.sin_family=AF_INET;
tcpaddr2.sin_port=htons(5050); //发送端口5050
tcpaddr2.sin_addr.S_un.S_addr=inet_addr(ip);
int len=sizeof(SOCKADDR);

while(1)
{
printf("我:\n ");
char sendBuf[100]="\0";
scanf("%s",sendBuf);
sendto(s2,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&tcpaddr2,len);
Sleep(1000);
}

closesocket(s2);
return 0;
}

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

WORD wVersionRequested;
WSADATA wsaData;

int iSockErr,iSockErr2;
int err;
wVersionRequested=MAKEWORD(2,2);
err = WSAStartup( wVersionRequested, &wsaData );

if(WSAStartup(wVersionRequested,&wsaData)!=0)
{
printf("Winsock 初始化错误!\n");//Winsock初始化错误
system("pause");
}
if(wsaData.wVersion!=wVersionRequested)
{
printf("Winsock 版本不匹配!\n");//Winsock版本不匹配
WSACleanup();
system("pause");
}

//创建socket
SOCKET s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

//创建套接口
sockaddr_in tcpaddr;
tcpaddr.sin_family=AF_INET;
tcpaddr.sin_port=htons(5050); //接收端口5050
tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);

//绑定套接口
if(bind(s,(LPSOCKADDR)&tcpaddr,sizeof(tcpaddr))==SOCKET_ERROR)
{
iSockErr=WSAGetLastError();
printf("%d",iSockErr);//根据不同的错误类型进行不同的处理
system("pause");
}
//进入多线程,发信息
HANDLE hThread;
hThread=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
CloseHandle(hThread);

char recvBuf[50]="\0";
int len=sizeof(SOCKADDR);
sockaddr_in addrClient;
while(1)
{
recvfrom(s,recvBuf,50,0,(SOCKADDR*)&addrClient,&len);
printf("他:\n %s\n",recvBuf);
Sleep(1000);
}
closesocket(s);
WSACleanup();
return 0;
}

相关文档
最新文档