控制台聊天程序实例+代码

服务器端程序代码:

  view plaincopy to clipboardprint?
  // 2009-06-28
  #pragma comment(lib,"ws2_32.lib")
  #include<winsock2.h>
  #include<iostream>
  #include<string>
  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]!=’’)
  {
  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());
  strCurMsg+="He said: ";
  strCurMsg+=msgRcv;
  strCurMsg+=’n’;
  strCurMsg+="input: ";
  system("cls");
  cout<<strCurMsg;
  }
  }
  }
  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"<<endl;
  }
  if(listen(sockSrv,5)==SOCKET_ERROR)
  {
  cout<<"listen error"<<endl;
  }
  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"<<endl;
  return 0;
  }
  else
  {
  cout<<"He is comingn";
  }
  CreateThread(NULL,0,
  (LPTHREAD_START_ROUTINE)recvProc,(void*)sockConnect,
  0,NULL);
  while(true)
  {
  char buf[100]={0};
  strCurMsg+="input: ";
  system("cls");
  cout<<strCurMsg;
  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<winsock2.h>
  #include<iostream>
  #include<string>
  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]!=’’)
  {
  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());
  strCurMsg+="He said: ";
  strCurMsg+=msgRcv;
  strCurMsg+=’n’;
  strCurMsg+="input: ";
  system("cls");
  cout<<strCurMsg;
  }
  }
  }
  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"<<endl;
  }
  if(listen(sockSrv,5)==SOCKET_ERROR)
  {
  cout<<"listen error"<<endl;
  }
  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"<<endl;
  return 0;
  }
  else
  {
  cout<<"He is comingn";
  }
  CreateThread(NULL,0,
  (LPTHREAD_START_ROUTINE)recvProc,(void*)sockConnect,
  0,NULL);
  while(true)
  {
  char buf[100]={0};
  strCurMsg+="input: ";
  system("cls");
  cout<<strCurMsg;
  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<winsock2.h>
  #include<iostream>
  #include<string>
  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]!=’’)
  {
  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());
  strCurMsg+="He said: ";
  strCurMsg+=msgRcv;
  strCurMsg+=’n’;
  strCurMsg+="input: ";
  system("cls");
  cout<<strCurMsg;
  }
  }
  }

  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 failedn";
  return 1;
  }
  else
  {
  cout<<"connect OKn";
  }
  CreateThread(NULL,0,
  (LPTHREAD_START_ROUTINE)recvProc,(void*)sockClient,
  0,NULL);
  while(true)
  {
  char buf[100]={0};
  strCurMsg+="input: ";
  system("cls");
  cout<<strCurMsg;
  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<winsock2.h>
  #include<iostream>
  #include<string>
  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]!=’’)
  {
  strCurMsg.erase(strCurMsg.end()-7,strCurMsg.end());
  strCurMsg+="He said: ";
  strCurMsg+=msgRcv;
  strCurMsg+=’n’;
  strCurMsg+="input: ";
  system("cls");
  cout<<strCurMsg;
  }
  }
  }
  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 failedn";
  return 1;
  }
  else
  {
  cout<<"connect OKn";
  }
  CreateThread(NULL,0,
  (LPTHREAD_START_ROUTINE)recvProc,(void*)sockClient,
  0,NULL);
  while(true)
  {
  char buf[100]={0};
  strCurMsg+="input: ";
  system("cls");
  cout<<strCurMsg;
  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;
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值