日期:2014-05-20  浏览次数:20864 次

类似QQ的应用程序开发的基本流程是什么啊?
怎么用tcp/ip协议?
------解决方案--------------------
登陆流程:1、服务器开启。2、客户端登陆,向服务器发送登陆信息,服务器验证登陆信息,存储用户信息,返还当前用户列表,断开连接。验证用户是否存在流程:1、客户端每隔一定时间,向服务器端发送“alive”报文,服务器端认为用户仍然登陆,并且返还当前可用用户列表。2、如果客户端超过一定时间不向服务器发送"alive"报文,则服务器端认为用户已经掉线,从可用用户列表中删除该用户。发送消息流程:客户端A发送报文给服务器端,服务器端转发报文给客户端B,如果客户端B成功接收,则返回报文给服务器端,服务器端将客户端B成功接收的信息返回给客户端A。你说的每隔用户连接都开一个线程是什么意思呢?按照我刚刚说的,服务器端肯定是只存在一个侦听线程,然后接收到报文以后,根据报文类型,创建不同的工作线程去进行处理。
给你一个思路吧 。看你的要求是要封装API的socket . 工程设置里面 添加 wsock32.lib 服务器端: #include <stdio.h> #include <Winsock2.h> void main() { SOCKET socket1; //InitWinsock(); WSADATA wsaData; int iErrorCode; if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL { printf("Winsock无法初始化!\n"); WSACleanup(); return; } printf("服务器开始创建SOCKET。\n"); struct sockaddr_in server; int len =sizeof(server); server.sin_family=AF_INET; server.sin_port=htons(27015); ///server的监听端口 server.sin_addr.s_addr=inet_addr("218.18.201.158"); ///server的地址 socket1=socket(AF_INET,SOCK_DGRAM,0); while (1) { char buffer[1024]="\0"; printf("input message\n"); scanf("%s",buffer); // printf("%s",buffer); if (strcmp(buffer,"bye")==0) { printf("退出!\n"); Sleep(100); closesocket(socket1); break; } if (sendto(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&server,len)!=SOCKET_ERROR) { //printf("sending..\n"); Sleep(100); if (recvfrom(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&server,&len) != SOCKET_ERROR) printf("rece from server:%s\n",buffer); } } closesocket(socket1); } 客户端: #include <stdio.h> #include <Winsock2.h> void main() { SOCKET socket1; //InitWinsock(); WSADATA wsaData; int iErrorCode; if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL { printf("Winsock无法初始化!\n"); WSACleanup(); return; } printf("服务器开始创建SOCKET。\n"); struct sockaddr_in local; struct sockaddr_in from; int fromlen =sizeof(from); local.sin_family=AF_INET; local.sin_port=htons(27015); ///监听端口 local.sin_addr.s_addr=INADDR_ANY; //inet_addr(INADDR_ANY);//INADDR_ANY; ///本机 socket1=socket(AF_INET,SOCK_DGRAM,0); bind(socket1,(struct sockaddr*)&local,sizeof(local)); while (1) { char buffer[1024]="\0"; printf("waiting for message from others-------------\n"); if (recvfrom(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR) { printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer); ////给cilent发信息 sendto(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&from,fromlen); } //Sleep(1000); } closesocket(socket1); }