TCPIP协议与网络编程期末大作业_第1页
TCPIP协议与网络编程期末大作业_第2页
TCPIP协议与网络编程期末大作业_第3页
TCPIP协议与网络编程期末大作业_第4页
TCPIP协议与网络编程期末大作业_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

知识影响格局,格局决定命运!TCPIP协议与网络编程期末大作业编号TCP/IP协议与网络编程期末大作业题目:基于Socket的网络通信物联网工程学院计算机科学与技术专业学号学生姓名任课教师二〇一六年X月摘要课题是基于TCP/UDP室系统主要包括注册、登陆、群聊、单聊、显示在线人员和退出功能。系统于TCP协议,服务器端向客户显示端发送数据是基于UDP协议。接字,达到数据传送的目的,从而实现聊天室系统功能。关键词:TCP/UDP;聊天室;网络套接字;数据传送目录第1章总体设计2第2章客户端设计32.1发送端设计32.11流程图32.12代码32.2接收端设计32.21流程图32.22代码3第3章服务器设计43.1流程图43.2代码4第4章运行结果5第1章总体设计1原理1.1TCPTCP/IP协议的程序是传输层使用TCP器之间先建立连接,在数据传输完成后要关闭连接,释放网络资源。面向连接的客户/服务器程序工作模型如下:1.2UDP无连接的数据报(SOCK_DGRAM)传输服务在传输层使用的协议时UDP协只要关闭套接口,释放网络资源,通信过程就结束了。无连接的数据包传输服务通信是,客户端与服务器端所使用的函数是类似的。面向无连接的客户/服务器程序工作模型如下:1.3流程图基于TCP/UDP分。功能主要是注册、登陆、群聊、单聊、显示在线人员和退出。客户端与1知识影响格局,格局决定命运!服务器端的连接协议基于TCPUDP端与服务器端建立连接后,客户端进行操作,将数据发送至客户显示端。第2章客户端设计2.11流程图2.12代码#includewinsock2.h#includestdlib.h#includestdio.h#pragmacomment(lib,“Ws2_32.lib“)#defineBUFFER_SIZE1024voidMySendMessage(SOCKETsSocket,char*response,intresponseLen);intmain(intargc,char**argv){WSADATAwsaData;sockaddr_inser,cli;SOCKETsClient,wchysClient;intiLen,wchyiLen;intiRecv;charsend_buf[1000];charrecv_buf[BUFFER_SIZE];if(WSAStartup(MAKEWORD(2,2),wsaData)!=0){printf(“WSAStartup()\n“);return0;}printf(“手动连接模式中....\n“);charszServer[256];//连接的服务器地址,IP地址printf(“请输入即将连接的服务器IP地址:“);gets(szServer);ser.sin_family=AF_INET;ser.sin_port=htons(5050);ser.sin_addr.s_addr=inet_addr(szServer);charuser[20],password[20];charstr[100],str1[100],wchystr[100];boolhasLogin=false;//只能绑定一次,开始放在了循环里,555wchysClient=socket(AF_INET,SOCK_DGRAM,0);if(wchysClient==INVALID_SOCKET){printf(“socket()Faild:%d\n“,WSAGetLastError());return0;}cli.sin_family=AF_INET;cli.sin_port=htons(5053);cli.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(wchysClient,(LPSOCKADDR)cli,sizeof(cli))==SOCKET_ERROR){printf(“bind()Faild:%d\n“,WSAGetLastError());return0;}wchyiLen=sizeof(cli);memset(recv_buf,0,sizeof(recv_buf));sClient=socket(AF_INET,SOCK_STREAM,0);if(sClient==INVALID_SOCKET){printf(“socket()\n“);return0;}if(connect(sClient,(sockaddr*)ser,sizeof(ser))==INVALID_SOCKET){printf(“socket()\n“);return0;}else{boolhasLogin=false;while(!hasLogin){printf(“--------------------------------\n“);printf(“0.注册\2知识影响格局,格局决定命运!n“);printf(“1.登陆\n“);printf(“2.退出\n“);printf(“请输入相应的数字:\nscanf(“%s“,str);switch(str[0]){case'0':printf(“用户名:“);scanf(“%s“,user);printf(“密码:“);scanf(“%s“,password);strcpy(send_buf,“0“);strcat(send_buf,user);strcat(send_buf,“@“);strcat(send_buf,password);MySendMes户名:“);scanf(“%s“,user);printf(“密码:“);scanf(“%s“,password);strcpy(send_buf,“1“);strcat(send_buf,user);strcat(send_buf,“@“);strcat(send_buf,password);MySendMessage(sClient,send_buf,sizeof(send_buf));iRecv=recvfrom(wchysClient,recv_buf,BUFFER_SIZE,0,(SOCKADDR*)cli,wchyiLen);if(iRecv==SOCKET_ERROR){printf(“recvfrom()Faild:%d\n“,WSAGetLastError());return0;}elseif(iRecv==0)break;else{//接收到了正确数据recv_buf[1]=='@'){hasLogin=0;system(“cls“);printf(“登录失败!*'){hasLogin=0;system(“cls“);printf(“已经在其他地方登陆\n“);printf(“登录失败!请重新选择用户登录或注册后登录^_^\n“);}if(recv_buf[0]=='#'recv_buf[1]=='#'){hasLogin=1;system(“cls“);printf(“登录成功^_^\n“);boolwchyhasLogin=false;while(!wchyhasLogin){printf(“--------------------------------\n“);printf(“0.群聊\n“);printf(“1.单聊\n“);printf(“2.在线用户\n“);printf(“3.退出\n“);printf(“请输入相应的数字:\nscanf(“%s“,wchystr);switch(wchystr[0]){case'0':wchyhasLogin=1;printf(“输入exit退出。\n“);printf(“--------------------------------\n“);while(wchyhasLogin){printf(“scanf(“%s“,str);if(strcmp(str,“exit“)!=0){strcpy(send_buf,“2“);strcat(send_buf,user);strca3知识影响格局,格局决定命运!t(send_buf,“@“);strcat(send_buf,str);MySendMessage(sClient,send_buf,sizeof(send_buf));}else{system(“cls“);wchyhasLogin=0;}}break;case'1':wchyhasLogin=1;printf(“请输入单聊对象的用户名:“);scanf(“%s“,str1);strcpy(send_buf,“5“);strcat(send_buf,str1);strcat(send_buf,“@“);strcat(send_buf,user);strcat(send_buf,“*“);strcat(send_buf,“__Welcome__To__Single__Chat...“);MySendMessage(sClient,send_buf,sizeof(send_buf));iRecv=recvfrom(wchysClient,recv_buf,BUFFER_SIZE,0,(SOCKADDR*)cli,wchyiLen);if(iRecv==SOCKET_ERROR){printf(“recvfrom()Faild:%d\n“,WSAGetLastError());return0;}elseif(iRecv==0)break;else{//接收未在线,退出了单聊模式\n“);}if(recv_buf[0]=='%'recv_buf[1]=='%'){printf(“输入exit退出。\n“);printf(“--------------------------------\n“);while(wchyhasLogin){printf(“scanf(“%s“,str);if(strcmp(str,“exit“)!=0){strcpy(send_buf,“5“);strcat(send_buf,str1);strcat(send_buf,“@“);strcat(send_buf,user);strcat(send_buf,“*“);strcat(send_buf,str);MySendMessage(sClient,send_buf,sizeof(send_buf));}else{system(“cls“);wchyhasLogin=0;}}}break;case'2':strcpy(send_buf,“4“);strcat(send_buf,user);strcat(send_buf,“@“);strcat(send_buf,str);MySendMessage(sClient,send_buf,sizeof(send_buf));system(“cls“);break;case'3':strcpy(send_buf,“3“);strcat(send_buf,user);strcat(send_buf,“@“);MySendMessage(sClient,send_buf,sizeof(send_buf));hasLogin=0;wchyhasLogin=1;system(“cls“);break;default:system(“cls“);printf(“请输入正确信息\n“);break;}}}break;case'4知识影响格局,格局决定命运!2':exit(0);break;default:system(“cls“);printf(“请输入正确信息“);}}}system(“PAUSE“);closesocket(sClient);WSACleanup();return0;}voidMySendMessage(SOCKETsSocket,char*response,intresponseLen){intiSend;iSend=send(sSocket,response,responseLen,0);if(iSend==SOCKET_ERROR){printf(“send()Failed.:%d\n“,WSAGetLastError());}elseif(iSend==0);else{//printf(“send()succeeded!\n“);printf(“----------------------\n“);}}2.2接收端设计2.21流程图2.22代码#includestdlib.h#includestring.h//formain.cpp(1.cpp)#defineDEFAULT_PORT5051//FORRECV#defineDEFAULT_PORTSEND5052//FORSEND#defineBUFFER_LENGTH1000constboolDebug=0;#defineMaxUser1000//--------------------------------------------------------------------------------////当程序遇到异常而结束时会示出错误而退出//--------------------------------------------------------------------------------////成员结构信息#defineUserNameLen200#definePasswordLen200typedefstruct{charUserName[200];charPassword[200];boolLog;//是否登陆charIp[20];}UserData;#definethefile“config.txt“boolSaveData(UserData**userdata,intuserdatap);//--------------------------------------------------------------------------------////初始化用户数据导入intfindUser(UserData**data,intnum,char*name){inti;for(i=0;i=num;i++){if(strcmp(name,data[i]-UserName)==0)returni;}return-1;}voiddeal(char*str,UserData**data,intnum,char*response,char*ip){charUser[UserNameLen];charPass[PasswordLen];//第一位字符是功能号//0注册//1登陆//2会话//3退出0+name+@+passwordfor(i=1;istrlen(str);i++)if(str[i]=='@')break;str[i]='\0';strcpy(User,str+1);strcpy(Pass,str+i+1);t=findUser(data,num,U5知识影响格局,格局决定命运!ser);if(t==-1){//该用户名不存在,可以注册num++;data[num]=(UserData*)malloc(sizeof(UserData));if(data[num]==NULL){printf(“[+]ERROR:mallocfailed\n“);exit(1);}strcpy(data[num]-UserName,User);strcpy(data[num]-Password,Pass);data[num]-Log=0;memset(data[num]-Ip,'\0',sizeof(data[num]-Ip));printf(“%s用户注册成功\n“,User);//--------------------------------------------------注册完成//返回成功信息strcpy(response,“00“);//第一位是功能号第二位是状态号0表示成功1表示失败SaveData(data,num);}else{//failprintf(“%s用户注册失败\n“,User);//-----------------------------------------------注册失败strcpy(response,“01“);}}elseif(str[0]=='1'){//登陆的消息格式为1+name+@+passwordfor(i=1;istrlen(str);i++)if(str[i]=='@')break;str[i]='\0';//printf(“i=%d\n“,i);strcpy(User,str+1);strcpy(Pass,str+i+1);t=findUser(data,num,User);if(t!=-1){//找到该用户//printf(“Pass=%s“,Pass);//printf(“Pawd=%s“,data[t]-Password);if(strcmp(Pass,data[t]-Password)==0data[t]-Log==0){//密码验证成功printf(“%s登陆成功\n“,User);data[t]-Log=1;strcpy(data[t]-Ip,ip);strcpy(response,“10“);}elseif(strcmp(Pass,data[t]-Password)==0data[t]-Log==1){printf(“%s已经在其他地方登陆\n“,User);strcpy(response,“1@“);}else{printf(“%s登陆密码错误\n“,User);strcpy(response,“11“);}}else{printf(“%s用户不存在,登陆失败\n“,User);strcpy(response,“12“);}}elseif(str[0]=='2'){//会话的消息格式为2+'name'+'@'+'(message)'for(i=1;istrlen(str);i++)if(str[i]=='@')break;str[i]='\0';strcpy(User,str+1);t=findUser(data,num,User);if(t!=-1strcmp(data[t]-UserName,User)==0strcmp(data[t]-Ip,ip)==0){//表示确实是正6知识影响格局,格局决定命运!确用户发来的会话strcpy(response,“20“);strcat(response,User);strcat(response,“:“);strcat(response,str+i+1);printf(“%s:%s\n“,User,str+i+1);}else{strcpy(response,“21“);printf(“非正确用式为@')break;str[i]='\0';strcpy(User,str+1);t=findUser(data,num,User);if(t!=-1strcmp(data[t]-UserName,User)==0strcmp(data[t]-Ip,ip)==0){//表示确实是正确用户发来的会话strcpy(response,“30“);data[t]-Log=0;memset(data[t]-Ip,'\0',sizeof(data[t]-Ip));printf(“%s退出\n“,data[t]-UserName);}else{strcpy(response,“31“);printf(“非正确用户发来会话,不予处理!“);}}elseif(str[0]=='4'){for(i=1;istrlen(str);i++)if(str[i]=='@')break;str[i]='\0';strcpy(response,“40“);for(i=0;i=num;i++){if(data[i]-Log==1){printf(“%s[%s]在线\n“,data[i]-UserName,data[i]-//printf(“%s\n“,data[i]-UserName);strcat(response,data[i]-UserName);strcat(response,““);}else{//printf(“%s“,data[i]-}}}elseif(str[0]=='5'){for(i=1;istrlen(str);i++)if(str[i]=='@')break;str[i]='\0';strcpy(User,str+1);printf(“%s用户接收\n“,User);strcpy(Pass,str+i+1);for(i=1;istrlen(Pass);i++)if(Pass[i]=='*')break;Pass[i]='\0';printf(“%s用户发送\n“,Pass);t=findUser(data,num,User);if(t==-1){strcpy(response,“60“);printf(“单聊对象不存在“);}else{if(data[t]-Log==0){strcpy(response,“61“);printf(“%s未在线\n“,User);}elseif(data[t]-Log==1){strcpy(response,“50“);strcat(7知识影响格局,格局决定命运!response,Pass);strcat(response,“:“);strcat(response,Pass+i+1);printf(“%s:%s\n“,Pass,Pass+i+1);printf(“%s在线,可进行聊天\n“,User);}}}}voidMySendMessage(intsSocket,char*response,intresponseLen,SOCKADDR*cli,intcliLen){intiSend;iSend=sendto(sSocket,response,responseLen,0,(SOCKADDR*)cli,cliLen);if(iSend==SOCKET_ERROR){printf(“sendto()Failed.:%d\n“,WSAGetLastError());}elseif(iSend==0);else{//printf(“sendto()succeeded!\n“);//printf(“----------------------\n“);}}boolInitData(UserData**s,intnum,intp)//成功返回true发生错误返回false{//-----------------------------------------////读取文件信息并返回FILE*fp;charUserBuf[UserNameLen];charPassBuf[PasswordLen];fp=fopen(thefile,“r“);if(!fp){if(Debug)printf(“config文件不存在\n“);}else{if(Debug)printf(“findconfig.txt\n“);while(!feof(fp)){//fgets(buf,sizeof(buf),fp);fscanf(fp,“%s“,UserBuf);fscanf(fp,“%s“,PassBuf);if(Debug)printf(“[+]User:%sPassword:%s\n“,UserBuf,PassBuf);//addp++;s[p]=(UserData*)malloc(sizeof(UserData));if(!s[p]){printf(“[+]ERROR:mallocfailed!\n“);returnfalse;}strcpy(s[p]-UserName,UserBuf);strcpy(s[p]-Password,PassBuf);s[p]-Log=0;memset(s[p]-Ip,'\0',sizeof(s[p]-Ip));}fclose(fp);}returntrue;}boolSaveData(UserData**userdata,intuserdatap){FILE*fp;///建立配置文件fp=fopen(thefile,“w“);if(!fp){printf(“[+]ERROR:无法创建config文件!“);returnfalse;};inti;for(i=0;i=userdatap;i++){fprintf(fp,“%s%s“,userdata[i]-UserName,userdata[i]-Password);if(i!=userdatap)fprintf(fp,“\n“);}fclose(fp);}#includewinsock2.h#includestdlib.h#includestdio8知识影响格局,格局决定命运!.h#pragmacomment(lib,“ws2_32.lib“)#include“ser.h“//UserData*userdata[MaxUser];intuserdatap=-1;#defineBUFFER_SIZE2048voidCompressArrays(WSAEVENTevents[],SOCKETsockets[],DWORD*total,intindex){for(size_ti=index+1;i*total;i++){events[i-1]=events[i];}*total--;}intmain(intargc,char**argv){//InitData(userdata,MaxUser,userdatap);charresponse[BUFFER_LENGTH];WSADATAwsaData;charbuffer[BUFFER_SIZE];sockaddr_inInternetAddr;//客户地址structsockaddr_incli;structsockaddr_incliArray[WSA_MAXIMUM_WAIT_EVENTS];intiLen;iLen=sizeof(cli);//udp发送SOCKETsSocket;structsockaddr_inser;charsend_buf[]=“udp!“;SOCKETsClient;SOCKETSocketArray[WSA_MAXIMUM_WAIT_EVENTS];WSANETWORKEVENTSNetworkEvents;WSAEVENTNewEvent;WSAEVENTEventArray[WSA_MAXIMUM_WAIT_EVENTS];SOCKETAccept,Listen;DWORDEventTotal=0;DWORDIndex;if(WSAStartup(MAKEWORD(2,2),wsaData)!=0){printf(“WSAStartup()\n“);return0;}//创建一个流式套接口Listen=socket(AF_INET,SOCK_STREAM,0);InternetAddr.sin_family=AF_INET;InternetAddr.sin_addr.s_addr=htonl(INADDR_ANY);InternetAddr.sin_port=htons(5050);if(bind(Listen,(PSOCKADDR)InternetAddr,sizeof(InternetAddr))==SOCKET_ERROR){printf(“bind()\n“);return0;}printf(“----------------------\n“);printf(“ServerWaiting\n“);printf(“----------------------\n“);//创建一个事件对象NewEvent=WSACreateEvent();//在Listen套接口上注册套接口连接和关闭的网络事件WSAEventSelect(Listen,NewEvent,FD_ACCEPT|FD_CLOSE);if(listen(Listen,5)==SOCKET_ERROR){printf(“listen()\n“);return0;}SocketArray[EventTotal]=Listen;EventArray[EventTotal]=NewEvent;EventTotal++;//udpsSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket==INVALID_SOCKET){printf(“failed“);return0;}ser.sin_family=AF_INET;ser.sin_port=htons(5051);//ser.sin_addr.s_addr=in9知识影响格局,格局决定命运!et_addr(“127.0.0.1“);while(true){//在所有套接口上等待网络事件的发生Index=WSAWaitForMultipleEvents(EventTotal,EventArray,FALSE,WSA_INFINITE,FALSE);if(WSAEnumNetworkEvents(SocketArray[Index-WSA_WAIT_EVENT_0],EventArray[Index-WSA_WAIT_EVENT_0],NetworkEvents)==SOCKET_ERROR){printf(“%d/n“,WSAGetLastError());printf(“WSAEnumNetworkEvents()\n“);return0;}//检查FD_ACCEPTif(NetworkEvents.lNetworkEventsFD_ACCEPT){if(NetworkEvents.iErrorCode[FD_ACCEPT_BIT]!=0){WSACloseEvent(EventArray[Index-WSA_WAIT_EVENT_0]);printf(“FD_ACCEPTfailedwitherror%d\n“,NetworkEvents.iErrorCode[FD_ACCEPT_BIT]);break;}//接收新的连接,并将其存入套接口数组Accept=accept(SocketArray[Index-WSA_WAIT_EVENT_0],(structsockaddr*)cli,iLen);//当套接口的数量超界时,关闭该套接口if(EventTotalWSA_MAXIMUM_WAIT_EVENTS){printf(“Toomanyconnections“);closesocket(Accept);break;}NewEvent=WSACreateEvent();if(NewEvent==WSA_INVALID_EVENT){printf(“WSACreateEvent()\n“);break;}WSAEventSelect(Accept,NewEvent,FD_READ|FD_WRITE|FD_CLOSE);EventArray[EventTotal]=NewEvent;SocketArray[EventTotal]=Accept;cliArray[EventTotal]=cli;EventTotal++;printf(“Socket%dconnected\n“,Accept);}//一下处理FD_READ通知if(NetworkEvents.lNetworkEventsFD_READ){if(NetworkEvents.iErrorCode[FD_READ_BIT]!=0){WSACloseEvent(EventArray[Index-WSA_WAIT_EVENT_0]);printf(“FD_READfailedwitherror%d\n“,NetworkEvents.iErrorCode[FD_READ_BIT]);break;}//从套接口读入数据intiRecv=recv(SocketArray[Index-WSA_WAIT_EVENT_0],buffer,sizeof(buffer),0);if(iRecv==0){break;}elseif(iRecv==SOCKET_ERROR){printf(“recv()\n“);break;}else{//请求端10知识影响格局,格局决定命运!IPser.sin_addr.s_addr=inet_addr(inet_ntoa(cliArray[Index-WSA_WAIT_EVENT_0].sin_addr));printf(“AcceptedclientIP:[%s],port:[%d]\n“,inet_ntoa(cliArray[Index-WSA_WAIT_EVENT_0].sin_addr),ntohs(cliArray[Index-WSA_WAIT_EVENT_0].sin_port));printf(“recv:%s\n“,buffer);memset(response,'\0',sizeof(response));deal(buffer,userdata,userdatap,response,inet_ntoa(cliArray[Index-WSA_WAIT_EVENT_0].sin_addr));printf(“response:%s\n“,response);inti;if(response[0]=='2'response[1]=='0'){//处理20群聊printf(“recv:%s\n“,buffer);for(i=0;i=userdatap;i++){if(userdata[i]-Log==0)continue;ser.sin_addr.s_addr=inet_addr(userdata[i]-MySendMessage(sSocket,response,sizeof(response),(SOCKADDR*)ser,sizeof(ser));}}elseif(response[0]=='5'response[1]=='0'){//处理50单聊charstrwchy[2048];strcpy(strwchy,response);printf(“recv:%s\n“,buffer);for(i=1;istrlen(strwchy);i++)if(strwchy[i]==':')break;strwchy[i]='\0';printf(“strwchy:%s\n“,strwchy+2);for(i=0;i=userdatap;i++){if(strcmp((buffer+1),(strwchy+2))==0){if(strcmp((strwchy+2),userdata[i]-UserName)==0){//发送给单聊对象ser.sin_addr.s_addr=inet_addr(userdata[i]-MySendMessage(sSocket,response,sizeof(response),(SOCKADDR*)ser,sizeof(ser));}}else{if(strcmp((buffer+1),userdata[i]-UserName)==0){//发送给单聊对象ser.sin_addr.s_addr=inet_addr(userdata[i]-MySendMessage(sSocket,response,sizeof(response),(SOCKADDR*)ser,sizeof(ser));}if(strcmp((strwchy+2),userdata[i]-UserName)==0){//发送给单聊对象ser.sin_addr.s_addr=inet_addr(userdata[i]-MySendMessage(sSocket,response,sizeof(response),(SOCKADDR*)ser,sizeof(ser));}}}}elseif(response[0]=='4'response[1]=='0'){//处理40在线人数printf(“recv:%s\11知识影响格局,格局决定命运!n“,buffer);for(i=0;i=userdatap;i++){if(strcmp((buffer+1),userdata[i]-UserName)==0){//发到请求方的接收端ser.sin_addr.s_addr=inet_addr(userdata[i]-MySendMessage(sSocket,response,sizeof(response),(SOCKADDR*)ser,sizeof(ser));}}}else{MySendMessage(sSocket,response,sizeof(response),(SOCKADDR*)ser,sizeof(ser));}}}//以下处理FD_CLOSE通知if(NetworkEvents.lNetworkEventsFD_CLOSE){if(NetworkEvents.iErrorCode[FD_WRITE_BIT]!=0){WSACloseEvent(EventArray[Index-WSA_WAIT_EVENT_0]);printf(“FD_WRITEfaieldwitherror%d\n“,NetworkEvents.iErrorCode[FD_WRITE_BIT]);break;}//关闭套接口closesocket(SocketArray[Index-WSA_WAIT_EVENT_0]);//从套接口事件和事件数组中删除关闭的套接口的有关信息CompressArrays(EventArray,SocketArray,EventTotal,Index-WSA_WAIT_EVENT_0);}}WSACleanup();return0;}第3章服务器设计3.1流程图3.2代码#includeWinSock2.h#includestdio.h#includestdlib.h#includestring.h#pragmacomment(lib,“ws2_32.lib“)#defineDEFAULT_PORT5051//FORRECV#defineBUFFER_LENGTH1000voidMySendMessage(SOCKETsSocket,char*response,intresponseLen,structsockaddr*cli,intcliLen);voidmain(){intiPort=DEFAULT_PORT;WSADATAwsaData;SOCKETsSocket,wchysSocket;intiLen,wchyiLen;intiSend;intiRecv;charsend_buf[1000];charname[255];charrecv_buf[BUFFER_LENGTH];char*ip;PHOSTENThostinfo;structsockaddr_inser,cli,wchy;if(WSAStartup(MAKEWORD(2,2),wsaData)!=0){printf(“FailedtoloadWinsock.\n“);return;}if(gethostname(name,sizeof(name))==0){if((hostinfo=gethostbyname(name))!=NULL){ip=inet_ntoa(*(structin_addr*)*hostinfo-h_addr_list);}}printf(“----------------------\n“);printf(“cServerWaiting\n“);printf(“ip%s\n“,ip);printf(“----------------------\n“);sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket==INVALID_SOC12知识影响格局,格局决定命运!KET){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和portiRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)cli,iLen);if(iRecv==SOCKET_ERROR){printf(“recvfrom()Faild:%d\n“,WSAGetLastError());return;}elseif(iRecv==0)break;else{//接收到了正确数据//printf(“[+]%s\n“,recv_buf);//控制信息的种类有000110111220213031//00注册成功01注册失败10登陆成功11.12表示登陆失败20表示一次成功会话21表示错误会话30表示成功推出31表示错误推出册成功\n“);elseprintf(“注册失败\n“);break;case'1':if(recv_buf[1]=='0'){printf(“登陆成功\n“);wchy.sin_family=AF_INET;wchy.sin_port=htons(5053);wchy.sin_addr.s_addr=inet_addr(“127.0.0.1“);wchysSocket=socket(AF_INET,SOCK_DGRAM,0);if(wchysSocket==INVALID_SOCKET){printf(“socket()Failed:%d\n“,WSAGetLastError());return;}wchyiLen=sizeof(wchy);strcpy(send_buf,“##“);MySendMessage(wchysSocket,send_buf,sizeof(send_buf),(structsockaddr*)wchy,wchyiLen);}elseif(recv_buf[1]=='@'){printf(“已经在其他地方登陆\n“);wchy.sin_family=AF_INET;wchy.sin_port=htons(5053);wchy.sin_addr.s_addr=inet_addr(“127.0.0.1“);wchysSocket=socket(AF_INET,SOCK_DGRAM,0);if(wchysSocket==INVALID_SOCKET){printf(“socket()Failed:%d\13知识影响格局,格局决定命运!n“,WSAGetLastError());return;}wchyiLen=sizeof(wchy);strcpy(send_buf,“**“);MySendMessage(wchysSocket,send_buf,sizeof(send_buf),(structsockaddr*)wchy,wchyiLen);}else{printf(“登陆失败\n“);wchy.sin_family=AF_INET;wchy.sin_port=htons(5053);wchy.sin_addr.s_addr=inet_addr(“127.0.0.1“);wchysSocket=sock

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论