用C++编写的SOCKET服务端与客户端代码实例

来源:互联网 发布:瞻博网络 上海 电话 编辑:程序博客网 时间:2024/05/16 08:02

服务端:

#include "winsock2.h"  #pragma comment(lib, "ws2_32.lib") #include <iostream>  using namespace std;  int main(int argc, char* argv[])  {  const int BUF_SIZE = 128;    WSADATA         wsd;              //WSADATA变量      SOCKET          sServer;          //服务端套接字      SOCKET          sClient;          //客户端套接字      SOCKADDR_IN     addrServ;         //服务端地址      char            buf[BUF_SIZE];    //接收数据缓冲区      char            sendBuf[BUF_SIZE];//返回给客户端的数据      int             retVal;           //返回值 cout << "本服务端程序由Dark_Smith编写\n";cout << endl;    //初始化套接字动态库      if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)      {          cout << "WSAStartup failed!" << endl;          return 1;      }            //创建套接字      sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);          if(INVALID_SOCKET == sServer)      {          cout << "socket failed!" << endl;          WSACleanup();           //释放套接字资源;          return  -1;      }            //服务器套接字地址       addrServ.sin_family=AF_INET;    //指定使用TCP/IP协议    addrServ.sin_port=htons(1032);  //设置端口号    addrServ.sin_addr.s_addr=inet_addr("10.66.215.186");  //设置服务端IP地址    //绑定套接字      retVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));      if(SOCKET_ERROR == retVal)      {             cout << "bind failed!" << endl;          closesocket(sServer);   //关闭套接字          WSACleanup();           //释放套接字资源;          return -1;      }            //开始监听       retVal = listen(sServer, 1);      if(SOCKET_ERROR == retVal)      {          cout << "listen failed!" << endl;                 closesocket(sServer);   //关闭套接字          WSACleanup();           //释放套接字资源;          return -1;      }            //接受客户端请求      sockaddr_in addrClient;      int addrClientlen = sizeof(addrClient);      sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen);      if(INVALID_SOCKET == sClient)      {          cout << "accept failed!" << endl;                 closesocket(sServer);   //关闭套接字          WSACleanup();           //释放套接字资源;          return -1;      }            while(true)      {          //接收客户端数据          ZeroMemory(buf, BUF_SIZE);          retVal = recv(sClient, buf, BUF_SIZE, 0);  if (SOCKET_ERROR == retVal)          {              cout << "客户端已关闭,通话结束!" << endl;cout<<endl;system("pause");            closesocket(sServer);   //关闭套接字              closesocket(sClient);   //关闭套接字                   WSACleanup();           //释放套接字资源;              return -1;          }          if(buf[0] == '\0')              break;        cout << "Client:" << buf <<endl;  //给客户端发送数据        cout << "Sever:" ;          cin >> sendBuf;           send(sClient, sendBuf, strlen(sendBuf), 0);      }            //退出      closesocket(sServer);   //关闭套接字      closesocket(sClient);   //关闭套接字      WSACleanup();           //释放套接字资源;            return 0;  }  

客户端:

#include "winsock2.h"  #pragma comment(lib, "ws2_32.lib")  #include <iostream>   using namespace std;  int main(int argc, char* argv[])  {  const int BUF_SIZE = 128;    WSADATA wsd;             //WSADATA变量  SOCKET sHost;            //服务端套接字  SOCKADDR_IN servAddr;    //服务端地址  char buf[BUF_SIZE];      //接收数据缓冲区  char bufRecv[BUF_SIZE];  int retVal;              //返回值  cout << "本客户端程序由Dark_Smith编写\n";cout << "此客户端通过TCP向服务端<10.66.215.186:1032>发送消息\n";cout << endl;//初始化套接字动态库  if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)  {  cout << "WSAStartup failed!" << endl;  return -1;  }  //创建套接字  sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  if(INVALID_SOCKET == sHost)  {  cout << "socket failed!" << endl;  WSACleanup();     //释放套接字资源  return  -1;  }    //设置服务端地址  servAddr.sin_family =AF_INET;    //指定使用TCP/IP servAddr.sin_addr.s_addr = inet_addr("10.66.215.186");  //指定服务端IP地址servAddr.sin_port = htons((short)1032);    //指定服务端端口int nServAddlen  = sizeof(servAddr);    //连接服务端  retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr));  if(SOCKET_ERROR == retVal)  {  cout << "connect failed!" << endl;  closesocket(sHost);         //关闭套接字  WSACleanup();               //释放套接字资源  return -1;  } while(true)  {  //向服务端发送数据  ZeroMemory(buf, BUF_SIZE); cout<< "Client:";  cin >> buf;  retVal = send(sHost, buf, strlen(buf), 0);  if (SOCKET_ERROR == retVal)  {  cout << "send failed!" << endl;  closesocket(sHost);   //关闭套接字  WSACleanup();   //释放套接字资源  return -1;  }//接收服务端的数据 ZeroMemory(bufRecv, BUF_SIZE);  recv(sHost, bufRecv,BUF_SIZE , 0);  cout<<"Sever:"<< bufRecv; cout<<"\n";  }//退出  closesocket(sHost); //关闭套接字  WSACleanup();//释放套接字资源  return 0;  }  





0 0
原创粉丝点击