教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

江南大学TCPIP群聊私聊设计(5)

来源:网络收集 时间:2026-08-11
导读: } iLens = sizeof(cli); 3. 服务器接收函数,此函数接收客户端的注册信息,并将此信息存储至user结构体链表中。 //接收注册信息 void rec_regist(){ int iLen = sizeof(users); int pos = 0; int iRecv_user; char

}

iLens = sizeof(cli);

3. 服务器接收函数,此函数接收客户端的注册信息,并将此信息存储至user结构体链表中。

//接收注册信息 void rec_regist(){ int iLen = sizeof(users); int pos = 0; int iRecv_user;

char *buf_rev = (char *)malloc(iLen); user = tail.next; while(pos

iRecv_user

recvfrom(sSocket,buf_rev+pos,iLen,0,(sockaddr*)&cli,&iLens);

if(iRecv_user==SOCKET_ERROR){ printf(\ break;

}

pos += iRecv_user;

}

memcpy(user,buf_rev,iLen);

printf(\用户%s注册成功.\\n\ printf(\ user->isOnline = 0;

user->next = (struct users *)malloc(sizeof(struct users)); user = user->next; tail.next = user; user->id = 0;

}

=

4. 服务器接收登陆函数,此函数为服务器接收当前用户输入登陆信息,并将此信息存储至userlogin结构体中。

//登陆函数 void login() { }

5. 服务器检测函数:此函数检测客户端的登陆用户名和密码是否正确,通过与本地存储的所有用户比较得出此用户的用户名和密码是否正确,如果正确,user_state返回2。如果用户已登录,user->isOnline= 2;

如果用户密码正确但未登录,user->isOnline = 1;否则user->isOnline = 0; //检测函数 void check(){

int i=1; int iSend_local; int iLen; char buf_send[1]; user= head.next; while(i==user->id){ char username[10]; char passward[10];

printf(\请输入登陆用户名:\\n\scanf(\printf(\请输入登陆密码:\\n\scanf(\

struct hostent *phostinfo = gethostbyname(\

char *p = inet_ntoa (* ((struct in_addr *)(*phostinfo->h_addr_list)) ); strcpy(userlogin.username,username); strcpy(userlogin.passward,passward); strncpy(user->ip, p, sizeof(user->ip)- 1); user->ip[19] = '\\0';

}

//输入的用户名和密码正确

if(strcmp(login.username,user->username)==0 }

user = user->next; i = i+1;

&&strcmp(login.passward,user->passward)==0){

//登录成功并已经在线时,不允许登录 if(login.isOnline == user->isOnline){ } else{ }

login.isOnline = 1;

printf(\此用户已经登录.\\n\printf(\登录成功.\\n%user->isOnline = 1; login.isOnline = 2; break;

*buf_send = (char)login.isOnline; iSend_local

=

sendto(sSocket,buf_send,sizeof(buf_send),0,(struct

sockaddr*)&cli,iLens);

}

6. 服务器接收函数:此函数为服务器接收到客户端请求群聊,得到所有在线的人数并得到其ip,将客户端需要发送的消息发送给各个本地服务器。

//群聊

void recv_message(){

int i = 1;

int iRec_local,iSend_local; recv();

if(login.isOnline == 2){

user = head.next; while(i!=0){

char buf_rev[1024]; iRec_local

=

recvfrom(sSocket,buf_rev,sizeof(buf_rev),0,(sockaddr*)&cli,&iLens); //放消息,此消息为用户名字信息

if(iRec_local==SOCKET_ERROR)

printf(\

else printf(\

while(user->id!=0){ printf(\ printf(\

if(user->ip!=NULL&&user->isOnline==1){ printf(\当前在线用户:%s\\n\

cli.sin_addr.s_addr = inet_addr(user->ip); //户端ip

iSend_local

sendto(sSocket,buf_rev,sizeof(buf_rev),0,(struct sockaddr*)&cli,iLens);

}

user = user->next;

}

if (stricmp(buf_rev, \ break; }

}

} 重置客=

}

else if(login.isOnline== 1){ } else

printf(\用户登录失败,未注册或密码错误.\\n\printf(\此用户已经登录,不可重复登录.\\n\

7. 服务器接收函数:服务器接收到私聊请求执行此函数,服务器得到所有在线人数并将其返回给客户端,客户端选择要私聊的人并由服务器转发给其本地服务器。

//私聊

void recv_message_s(){

int pos = 0; int i = 1; int num = 0;

int iRec_local,iSend_local; if(login.isOnline == 2){

while(i!=0){

char buf_rev[1024]; char buf_revip[1024]; iRec_local

=

recvfrom(sSocket,buf_rev,sizeof(buf_rev),0,(sockaddr*)&cli,&iLens); //放消息,此消息为用户名字信息

if(iRec_local==SOCKET_ERROR)

printf(\

else

printf(\

user = head.next; while(user->id!=0){

if(user->ip!=NULL&&user->isOnline == 1){

…… 此处隐藏:969字,全部文档内容请下载后查看。喜欢就下载吧 ……
江南大学TCPIP群聊私聊设计(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/615187.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)