网络聊天室UDP实现
服务器端:
头文件:
#include <myhead.h>
//定义客户信息结构体
typedef struct magtye
{
char type; //消息类型
char name[100]; //客户姓名
char text[1024]; //客户发送聊天信息
}msg_t;
//定义结构体存储每个客户端的ip地址和端口号
typedef struct IP_PORT
{
struct sockaddr_in cin;//地址信息
struct IP_PORT *next;//
}*addrlist;
void usr_login(int sfd,msg_t msg,addrlist *head,struct sockaddr_in cin);
void usr_chat(int sfd,msg_t msg,addrlist head,struct sockaddr_in cin);
void usr_quit(int sfd,msg_t msg,addrlist *head,struct sockaddr_in cin);
主函数:
#include"head.h"
int main(int argc, const char *argv[])
{
//创建套接字
int sfd=-1;
sfd=socket(AF_INET,SOCK_DGRAM, 0);
if(sfd==-1)
{
perror("socket error");
return -1;
}
//将端口号快速重用
int reuse=1;
if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1)
{
perror("setsockopt error");
return -1;
}
//服务器进行绑定
//(1)、从终端获取端口号和地址
char SER_IP[100];
int SER_PORT;
printf("请输入服务器ip地址和端口号:");
scanf("%s %d",SER_IP,&SER_PORT);
getchar();//吸收垃圾字符
//(2)、填充服务器地址信息结构体
struct sockaddr_in sin;
sin.sin_family=AF_INET; //地址族
sin.sin_port=htons(SER_PORT); //端口号
sin.sin_addr.s_addr=inet_addr(SER_IP); //IP地址
socklen_t sin_len=