请问如何能让程序多线程(内详)
是这样的我想做一个客户端--服务器程序,要求是当启动服务器后可以同时运行多个客户端,然后可以分别在不同的客户段中输入语句,服务器都可以显示(并且传为大写),也就是说服务器要多线程.我能做到客户端和服务器一对一的响应,不会多线程,请帮忙.我的代码:
客户端:
#include<stdio.h>
#include<stdlib.h>
#include<winsock2.h>
#include<string.h>
#pragma comment(lib,"ws2_32")
#ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff
#endif
#define LINELEN 128
void TCPecho(const char * host)
{
char buf[LINELEN+1];
SOCKET s;
int outchars;
struct sockaddr_in ipaddr;
memset(&ipaddr,0,sizeof(ipaddr));
ipaddr.sin_family=AF_INET;
ipaddr.sin_port=htons(1314);
ipaddr.sin_addr.s_addr=inet_addr("219.243.37.159");
s=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
connect(s,(struct sockaddr *)&ipaddr,sizeof(ipaddr));
while(fgets(buf,sizeof(buf),stdin))
{
buf[LINELEN]='\0';
outchars=strlen(buf);
send(s,buf,outchars,0);
if(buf[0]=='\n')
break;
}
closesocket(s);
}
void main()
{
char * host="219.243.37.159";
WSADATA wsadata;
WSAStartup(MAKEWORD(2,0),&wsadata);
TCPecho(host);
WSACleanup();
exit(0);
}
服务器:
#include<stdio.h>
#include<stdlib.h>
#include<winsock2.h>
#include<string.h>
#pragma comment(lib,"ws2_32")
#define QLEN 5
#define BUFSIZE 2048
void main()
{
char * service="1314";
struct sockaddr_in fsin;
SOCKET ssock,sock;
WSADATA wsadata;
int alen,cc;
char buf[BUFSIZE];
WSAStartup(MAKEWORD(2,0),&wsadata);
struct sockaddr_in ipaddr;
memset(&ipaddr,0,sizeof(ipaddr));
ipaddr.sin_family=AF_INET;
ipaddr.sin_port=htons(1314);
sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
bind(sock,(struct sockaddr *)&ipaddr,sizeof(ipaddr));
listen(sock,QLEN);
while(1)
{
alen=sizeof(struct sockaddr);
ssock=accept(sock,(struct sockaddr *)&fsin,&alen);
while(cc=recv(ssock,buf,sizeof(buf)-1,0))
{
buf[cc]='\0';
for(int i=0;i<cc;i++)
if(buf[i]>=97 && buf[i]<=122)
buf[i]-=32;
printf("%s",buf);
}
printf("Connect close ...");
closesocket(ssock);
break;
}
}
请大家帮忙,在线急等
问题点数:20、回复次数:2Top
1 楼hdt(倦怠)回复于 2005-03-16 10:54:41 得分 20
ms-help://MS.MSDNQTR.2003FEB.2052/wcesdkr/htm/_wcesdk_Win32_CreateThread.htmTop
2 楼simonzone(马叉虫)回复于 2005-03-17 12:34:04 得分 0
1. this->m_ListenThread = ::CreateThread(0,0,Listen,this,0,0);
void Listen()
{
.........
}
2. if(this->m_ListenThread)
::TerminateThread(this->m_ListenThread,0);
但你要是在vc++ 环境中,最好不要直接用::CreateThread 方法(有可能会导致线程的堆栈不能free),::AfxBeginThread 比较好,多了一些线程安全方面的初始化代码。Top




