| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 717 人关注过本帖
标题:有关于服务器转发和群发的问题
只看楼主 加入收藏
xiexinxing
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-4-19
收藏
 问题点数:0 回复次数:2 
有关于服务器转发和群发的问题

关于服务器转发和群发的问题

我想问问有关于SOCKET服务器转发和群发消息的问题,用的是TCP协议.
我有结构提链表把连上的客户端IP和端口号都存储下来,我应该怎么转发?下面是我服务端的部分代码,请高手指导下,非常感激啊..另外客户端需要改变不?
还有就是下面程序中我些的多线程是否有错?我自己感觉怪怪的
DWORD WINAPI AnswerThread(LPVOID lparam)
{
SOCKET ClientSocket=(SOCKET)(LPVOID)lparam;

int bytesRecv;
char sendbuf[32]="";
char recvbuf[32]="";

while(1)
{
bytesRecv=SOCKET_ERROR;
for(int i=0;i<(int)strlen(recvbuf);i++)
{
recvbuf[i]='\0';
}
while(bytesRecv==SOCKET_ERROR)
{
bytesRecv=recv(ClientSocket,recvbuf,32,0);
}
send(ClientSocket,recvbuf,strlen(recvbuf),0);
cout<<recvbuf<<endl;
}

return 0;
}
struct test //创建链表存放CLIENT的IP和端口号
{ SOCKET ID;
int clientIP;
int port;
test *next;
};
test *head;//指导向链表头的指针


void main()
{
HWND hWnd;
unsigned int wMsg;
WSADATA wsadata;
int error;
error=WSAStartup(MAKEWORD(1,1),&wsadata);
if (error!=0)
{ cout<<"WSAStartup failed!"<<endl;

return;
}
if (LOBYTE(wsadata.wVersion)!=1 || HIBYTE(wsadata.wVersion)!=1)
{WSACleanup( );
return;
}
SOCKET socketserver=socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrserver;
addrserver.sin_family=AF_INET;
addrserver.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrserver.sin_port=htons(6000);
bind(socketserver,(SOCKADDR*)&addrserver,sizeof(addrserver));
listen(socketserver,10);
SOCKADDR_IN addrclient;
WSAAsyncSelect(socketserver,hWnd, wMsg, FD_CONNECT);
SOCKET sockconn;
test *ls;
test *le;
ls=new test;
le=ls;
head=NULL;
while (1)
{
int len=sizeof(SOCKADDR);
SOCKET sockconn=accept(socketserver,(SOCKADDR*)&addrclient,&len);
ls->ID=sockconn;
ls->clientIP=addrclient.sin_addr.S_un.S_addr;
ls->port=addrclient.sin_port;
if(head=NULL)
{ head=ls;
}
else
{
le->next=ls;
}
le=ls;
ls=new test;
char sendbuf[100]="welcome";
send(sockconn,sendbuf,strlen(sendbuf)+1,0);
char recvbuf[100];
recv(sockconn,recvbuf,strlen(recvbuf)+1,0);
cout<<recvbuf<<endl;
send(sockconn,recvbuf,strlen(recvbuf)+1,0);
if (lEvent=FD_CLOSE)
{ char clientclose[20]="exit";
send(sockconn,sendbuf,strlen(sendbuf)+1,0);

}
}
HANDLE hThread;
DWORD dwThreadId;
hThread=CreateThread(NULL,0, AnswerThread,(LPVOID)sockconn,0,&dwThreadId);
if(hThread==NULL)
{
cout<<"CreatThread AnswerThread() failed."<<endl;
}
else
{
cout<<"CreateThread OK."<<endl;
}

}


搜索更多相关主题的帖子: 服务器 SOCKET 客户端 LPVOID lparam 
2007-08-21 17:13
xiexinxing
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-4-19
收藏
得分:0 

帮帮我啊!!!

2007-08-23 08:40
comebaby
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2006-6-17
收藏
得分:0 
Sleep(时间);//你要暂停一下主进程,否则线程就没有执行的机会了
CloseHandle(hThread);//关闭线程
2007-08-23 10:58
快速回复:有关于服务器转发和群发的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045523 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved