UDP简单通讯之二

本文介绍了一个简单的UDP聊天室程序的设计与实现。该程序利用WinSock进行网络通信,并通过多线程技术实现客户端和服务端的数据收发。程序首先初始化WinSock环境,创建套接字并绑定到指定端口,然后在一个独立的线程中不断接收来自客户端的消息,并在主线程中发送消息到指定的IP地址。



//服务端和客户端合并,使用多线程技术实现


#include <WinSock2.h>
#include <iostream>
#include <process.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;

const unsigned short PORT = 8008;
SOCKET sock;

//线程函数,实现接收函数
void RecMain(void *pM)
{

	char s[256];
	sockaddr_in sfrom = {0};
	int slen = sizeof(sfrom);
	int result;
	while ((result=recvfrom(sock,s,sizeof(s),0,(sockaddr*)&sfrom,&slen)) >0)
	{
		s[result] = '\0';
		cout << inet_ntoa(sfrom.sin_addr) << "," << htons(sfrom.sin_port)<<": "<< s <<endl;
	}
}


int main()
{
	WSADATA wd;

	WORD wVer = MAKEWORD(2,2);
	int result = WSAStartup(wVer, &wd);

	sock = socket(AF_INET, SOCK_DGRAM, 0);
	if (INVALID_SOCKET==sock)
	{
		cout << "socket函数错误!" << WSAGetLastError() << endl;
		return -1;
	}

	struct sockaddr_in sa = {AF_INET, htons(PORT)};
	result = bind(sock, (sockaddr*)&sa, sizeof(sa));
	if (result==SOCKET_ERROR)
	{
		cout << "bind函数错误: " << WSAGetLastError() << endl;
	}
	else cout << "端口发布成功!" << PORT << endl;

	_beginthread(RecMain,1024*1024,NULL);

	char s[256];
	sockaddr_in sfrom = {0};
	int slen = sizeof(sfrom);

	char IP[20];
	while (1)
	{
		cout<<"请输入对方IP地址:"<<endl;
		cin>>IP;
		fflush(stdin);
		cout << "请输入信息!"<<endl;
		
		gets(s);

		sa.sin_addr.S_un.S_addr = inet_addr(IP);
		sa.sin_port = htons(PORT);
		sendto(sock,s,strlen(s),0,(sockaddr*)&sa,sizeof(sa));
		Sleep(100);
	}

	return 0;
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值