当前位置: 首页 > 图文教程 > 认证考试 > 计算机等级考试 > 控制台聊天程序服务器端代码

计算机等级考试
delphi的Desktop主窗体介绍
计算机“蓝屏”的硬件原因和解决技巧
解决开机提示boot.ini非法的故障
SATA硬盘造成Ghost蓝屏故障的解决
电脑内存故障修复大全
LDAPS修改Active Directory目录用户
数值转换为Excel列标的算法
控制台聊天程序服务器端代码
教你解决客户机连接服务器无法再次连接的问题
教你解决笔记本键盘输入字母故障
用Ghost来为硬盘进行磁盘碎片整理
操作系统更安全稳定的电脑使用方法

计算机等级考试 中的 控制台聊天程序服务器端代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-04   浏览: 438 ::
收藏到网摘: n/a

  今天在网上找到了个控制台聊天程序实例,感觉不错,稍微做些修改,以作收藏之用。

  服务器端程序代码:

  view plaincopy to clipboardprint?

  // 2009-06-28

  #pragma comment(lib,"ws2_32.lib")

  #include

  #include

  #include

  using namespace std;

  string strCurMsg="";

  void recvProc(SOCKET sockConnect)

  {

  char msgRcv[100]={0};

  while(true)

  {

  if(SOCKET_ERROR==recv(sockConnect,msgRcv,sizeof(msgRcv),0))

  {

  cout<<"\nHe is leaving";

  return;

  }

  if(msgRcv[0]!=’\0’)

  {

  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());

  strCurMsg+="He said: ";

  strCurMsg+=msgRcv;

  strCurMsg+=’\n’;

  strCurMsg+="input: ";

  system("cls");

  cout<

  }

  }

  }

  int main(int argc, char* argv[])

  {

  WORD wVersionRequested;

  WSADATA wsaData;

  int err;

  wVersionRequested = MAKEWORD( 1, 1 );

  err = WSAStartup( wVersionRequested, &wsaData );

  if ( err != 0 ) {

  return 1;

  }

  if ( LOBYTE( wsaData.wVersion ) != 1||

  HIBYTE( wsaData.wVersion ) != 1) {

  WSACleanup( );

  return 1;

  }

  SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  sockaddr_in addrSrv;

  memset(&addrSrv,0,sizeof(addrSrv));

  addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

  addrSrv.sin_family=AF_INET;

  addrSrv.sin_port=htons(5000);

  if(bind(sockSrv,(sockaddr*)&addrSrv,sizeof(sockaddr))==SOCKET_ERROR)

  {

  cout<<"bind error"<

  }

  if(listen(sockSrv,5)==SOCKET_ERROR)

  {

  cout<<"listen error"<

  }

  SOCKADDR_IN addrClient;

  int len=sizeof(sockaddr);

  while(true)

  {

  cout<<"Waiting .....";

  SOCKET sockConnect=accept(sockSrv,(sockaddr*)&addrClient,&len);

  if(sockConnect==INVALID_SOCKET)

  {

  cout<<"invalid socket"<

  return 0;

  }

  else

  {

  cout<<"He is coming\n";

  }

  CreateThread(NULL,0,

  (LPTHREAD_START_ROUTINE)recvProc,(void*)sockConnect,

  0,NULL);

  while(true)

  {

  char buf[100]={0};

  strCurMsg+="input: ";

  system("cls");

  cout<

  cin.getline(buf,100);

  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());

  strCurMsg+="You said:";

  strCurMsg+=buf;

  strCurMsg+=’\n’;

  send(sockConnect,buf,sizeof(buf),0);

  }

  closesocket(sockConnect);

  }

  WSACleanup();

  return 0;

  }

  // 2009-06-28

  #pragma comment(lib,"ws2_32.lib")

  #include

  #include

  #include

  using namespace std;

  string strCurMsg="";

  void recvProc(SOCKET sockConnect)

  {

  char msgRcv[100]={0};

  while(true)

  {

  if(SOCKET_ERROR==recv(sockConnect,msgRcv,sizeof(msgRcv),0))

  {

  cout<<"\nHe is leaving";

  return;

  }

  if(msgRcv[0]!=’\0’)

  {

  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());

  strCurMsg+="He said: ";

  strCurMsg+=msgRcv;

  strCurMsg+=’\n’;

  strCurMsg+="input: ";

  system("cls");

  cout<

  }

  }

  }

  int main(int argc, char* argv[])

  {

  WORD wVersionRequested;

  WSADATA wsaData;

  int err;

  wVersionRequested = MAKEWORD( 1, 1 );

  err = WSAStartup( wVersionRequested, &wsaData );

  if ( err != 0 ) {

  return 1;

  }

  if ( LOBYTE( wsaData.wVersion ) != 1||

  HIBYTE( wsaData.wVersion ) != 1) {

  WSACleanup( );

  return 1;

  }

  SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  sockaddr_in addrSrv;

  memset(&addrSrv,0,sizeof(addrSrv));

  addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

  addrSrv.sin_family=AF_INET;

  addrSrv.sin_port=htons(5000);

  if(bind(sockSrv,(sockaddr*)&addrSrv,sizeof(sockaddr))==SOCKET_ERROR)

  {

  cout<<"bind error"<

  }

  if(listen(sockSrv,5)==SOCKET_ERROR)

  {

  cout<<"listen error"<

  }

  SOCKADDR_IN addrClient;

  int len=sizeof(sockaddr);

  while(true)

  {

  cout<<"Waiting .....";

  SOCKET sockConnect=accept(sockSrv,(sockaddr*)&addrClient,&len);

  if(sockConnect==INVALID_SOCKET)

  {

  cout<<"invalid socket"<

  return 0;

  }

  else

  {

  cout<<"He is coming\n";

  }

  CreateThread(NULL,0,

  (LPTHREAD_START_ROUTINE)recvProc,(void*)sockConnect,

  0,NULL);

  while(true)

  {

  char buf[100]={0};

  strCurMsg+="input: ";

  system("cls");

  cout<

  cin.getline(buf,100);

  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());

  strCurMsg+="You said:";

  strCurMsg+=buf;

  strCurMsg+=’\n’;

  send(sockConnect,buf,sizeof(buf),0);

  }

  closesocket(sockConnect);

  }

  WSACleanup();

  return 0;

  }

  客户端程序代码:

  view plaincopy to clipboardprint?

  // 2009-06-28

  #pragma comment(lib,"ws2_32.lib")

  #include

  #include

  #include

  using namespace std;

  string strCurMsg="";

  void recvProc(SOCKET sockClient)

  {

  char msgRcv[100]={0};

  while(true)

  {

  if(SOCKET_ERROR==recv(sockClient,msgRcv,sizeof(msgRcv),0))

  {

  cout<<"\nHe is leaving";

  return;

  }

  if(msgRcv[0]!=’\0’)

  {

  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());

  strCurMsg+="He said: ";

  strCurMsg+=msgRcv;

  strCurMsg+=’\n’;

  strCurMsg+="input: ";

  system("cls");

  cout<

  }

  }

  }

  int main(int argc, char* argv[])

  {

  WORD wVersionRequested;

  WSADATA wsaData;

  int err;

  wVersionRequested = MAKEWORD( 1, 1 );

  err = WSAStartup( wVersionRequested, &wsaData );

  if ( err != 0 ) {

  return 1;

  }

  if ( LOBYTE( wsaData.wVersion ) != 1||

  HIBYTE( wsaData.wVersion ) != 1) {

  WSACleanup( );

  return 1;

  }

  SOCKET sockClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  SOCKADDR_IN addrSrv;

  addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

  addrSrv.sin_family=AF_INET;

  addrSrv.sin_port=htons(5000);

  if (connect(sockClient,(sockaddr*)&addrSrv,sizeof(sockaddr)) == SOCKET_ERROR)

  {

  cout<<"connected failed\n";

  return 1;

  }

  else

  {

  cout<<"connect OK\n";

  }

  CreateThread(NULL,0,

  (LPTHREAD_START_ROUTINE)recvProc,(void*)sockClient,

  0,NULL);

  while(true)

  {

  char buf[100]={0};

  strCurMsg+="input: ";

  system("cls");

  cout<

  cin.getline(buf,100);

  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());

  strCurMsg+="You said:";

  strCurMsg+=buf;

  strCurMsg+=’\n’;

  send(sockClient,buf,sizeof(buf),0);

  }

  closesocket(sockClient);

  WSACleanup();

  return 0;

  }

  // 2009-06-28

  #pragma comment(lib,"ws2_32.lib")

  #include

  #include

  #include

  using namespace std;

  string strCurMsg="";

  void recvProc(SOCKET sockClient)

  {

  char msgRcv[100]={0};

  while(true)

  {

  if(SOCKET_ERROR==recv(sockClient,msgRcv,sizeof(msgRcv),0))

  {

  cout<<"\nHe is leaving";

  return;

  }

  if(msgRcv[0]!=’\0’)

  {

  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());

  strCurMsg+="He said: ";

  strCurMsg+=msgRcv;

  strCurMsg+=’\n’;

  strCurMsg+="input: ";

  system("cls");

  cout<

  }

  }

  }

  int main(int argc, char* argv[])

  {

  WORD wVersionRequested;

  WSADATA wsaData;

  int err;

  wVersionRequested = MAKEWORD( 1, 1 );

  err = WSAStartup( wVersionRequested, &wsaData );

  if ( err != 0 ) {

  return 1;

  }

  if ( LOBYTE( wsaData.wVersion ) != 1||

  HIBYTE( wsaData.wVersion ) != 1) {

  WSACleanup( );

  return 1;

  }

  SOCKET sockClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  SOCKADDR_IN addrSrv;

  addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

  addrSrv.sin_family=AF_INET;

  addrSrv.sin_port=htons(5000);

  if (connect(sockClient,(sockaddr*)&addrSrv,sizeof(sockaddr)) == SOCKET_ERROR)

  {

  cout<<"connected failed\n";

  return 1;

  }

  else

  {

  cout<<"connect OK\n";

  }

  CreateThread(NULL,0,

  (LPTHREAD_START_ROUTINE)recvProc,(void*)sockClient,

  0,NULL);

  while(true)

  {

  char buf[100]={0};

  strCurMsg+="input: ";

  system("cls");

  cout<

  cin.getline(buf,100);

  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());

  strCurMsg+="You said:";

  strCurMsg+=buf;

  strCurMsg+=’\n’;

  send(sockClient,buf,sizeof(buf),0);

  }

  closesocket(sockClient);

  WSACleanup();

  return 0;

  }