udp多人聊天室 1-server n-client

UDP聊天室实现

通过udp实现一个聊天室。

只需要1个服务器 ,可以支持n个client。

服务器的工作就是接收到消息并转发给其他客户端。客户端需要同时开启接收了发送线程,时时刻刻接收服务器发来的信息以及将自己的信息发送到服务器上。


server:

#include<WinSock2.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma comment(lib,"ws2_32.lib")

#define DEFAULT_PORT 5051//FOR RECV
#define DEFAULT_PORTSEND 5052//FOR SEND
#define BUFFER_LENGTH 1000

typedef struct
{
	char ip[20];
	char name[10];
	bool in;
}CLIENT;

CLIENT clic[1000];
int ci=-1;
void main()
{
	int iPort=DEFAULT_PORT;
	WSADATA wsaData;
	SOCKET sSocket;

	int iLen;

	int iSend;

	int iRecv;

	char send_buf[1000];

	char recv_buf[BUFFER_LENGTH];

	struct sockaddr_in ser,cli;

	printf("----------------------\n");
	printf("Server Waiting\n");
	printf("----------------------\n");


	if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
	{printf("Failed to load Winsock.\n");return;}

	sSocket=socket(AF_INET,SOCK_DGRAM,0);
	if(sSocket==INVALID_SOCKET){printf("socket()Faild:%d\n",WSAGetLastError());return;}

	ser.sin_family=AF_INET;
	ser.sin_port=htons(iPort);
	ser.sin_addr.s_addr=htonl(INADDR_ANY);

	if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR)
	{printf("bind()Faild:%d\n",WSAGetLastError());return;}

	iLen=sizeof(cli);

	memset(recv_buf,0,sizeof(recv_buf));

	while(1)
	{
		//接收数据包 确定cli  表示 cli存有客户端发来的 ip和port 
		iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen);
		if(iRecv==SOCKET_ERROR)
		{printf("recvfrom()Faild
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值