CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

请问如何能让程序多线程(内详)

楼主lcrystal623(小水晶)2005-03-15 19:18:27 在 .NET技术 / VC.NET 提问

是这样的我想做一个客户端--服务器程序,要求是当启动服务器后可以同时运行多个客户端,然后可以分别在不同的客户段中输入语句,服务器都可以显示(并且传为大写),也就是说服务器要多线程.我能做到客户端和服务器一对一的响应,不会多线程,请帮忙.我的代码:  
   
  客户端:  
   
  #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

相关问题

  • 请问如何能让程序多线程(内详)
  • 程序如何实现多线程?
  • 如何用C++写多线程程序?
  • vc下的黑屏程序,如何调试多线程程序
  • 编写的C#多线程程序,如何结束程序?
  • 请问对于多线程的程序如何调试?
  • 在VB内如何创建多线程程序?
  • 在unix下如何编译多线程的程序?
  • 如何使用《Win32多线程程序设计》源代码
  • c语言开发的程序如何实现多线程

关键词

  • 多线程
  • 服务器
  • 客户
  • socket
  • ipaddr
  • ssock
  • linelen
  • buf
  • wsadata
  • listenthread

得分解答快速导航

  • 帖主:lcrystal623
  • hdt

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo