linux下的网络程序0——服务器端返回客户端输入

来源:互联网 发布:js时间滑动选择插件 编辑:程序博客网 时间:2024/06/01 16:22

<运行环境centos6.5  qt5.2>

功能:客户端输入什么,服务端就返回什么

代码:

server.cpp:

#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include <iostream>
using namespace std;
#define PORT 6000
#define MAX_REQ 5
int main()
{
    int listen_socket,client_socket;
    struct sockaddr_in local_addr;
    struct sockaddr_in client_addr;
    int recv_len;
    char recv_buf[1024];
    if((listen_socket = socket(AF_INET,SOCK_STREAM, 0)) ==-1)
    {
       cout << "创建server套接字失败~"<< endl;
       exit(1);
    }
   local_addr.sin_family =AF_INET;                              //!> 代表TCP/IP
   local_addr.sin_port =htons(PORT);                           //!> 端口号( 转化成流格式 )
                                                            //!> if此处写上0,那么系统随机选择一个未被使用的端口号
   local_addr.sin_addr.s_addr =INADDR_ANY;                     //!> 填入本机IP地址( INADDR_ANY )
   bzero(&(local_addr.sin_zero),8);                              //!> 填充0保持大小一致
   if(bind(listen_socket, (struct sockaddr*)&local_addr, sizeof(struct sockaddr)) ==-1)      //!> 将设置好的参数绑定到套接字
    {
       cout << "server套接字绑定参数失败~"<< endl;
       exit(1);
    }
    else
    {
       cout << "绑定成功!"<< endl;
    }
   if(listen(listen_socket, MAX_REQ) ==-1)
    {
       cout << "监听失败!"<< endl;
       exit(1);
    }
    else
    {
       cout << "server开始监听!"<< endl;
    }
    int len =sizeof(struct sockaddr_in);
if((client_socket = accept(listen_socket, (struct sockaddr*)&client_addr,(socklen_t*)&(len ))) == -1)
       {
           cout<< "server等待请求错误!"<< endl;
             exit(1);
       }
       else
       {
           cout<< "server正在等待请求!"<< endl;
       }
       cout<<"收到请求来自IP地址:"<<inet_ntoa(client_addr.sin_addr) <<"端口号:" << ntohs(client_addr.sin_port)<< endl;
       while( 1)
          {
              if((recv_len = recv(client_socket, recv_buf, sizeof(recv_buf), 0)) ==-1)      //!> 接收数据
              {
                  cout << "接收错误! "<< endl;
                  exit(1);
              }
              recv_buf[recv_len] = '\0';

          if((send(client_socket, recv_buf, recv_len, 0)) ==-1)         //!> 发送回去
          {
              cout << "发送错误!"<< endl;
          }

          if( strcmp( recv_buf, "quit" ) ==0 || strcmp( recv_buf, "q" ) ==0 || strcmp(recv_buf, "exit" ) ==0 )
          {
                 cout<< "结束发送!"<< endl;
                 exit(1);
          }
          }
    close(listen_socket);
   return 0;
}



client.cpp:

#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include <iostream>
using namespace std;
#define PORT 6000
int main()
{
    int client_socket;
    struct sockaddr_in serv_addr;
    char buf[1024];
    int recv_len;
   if((client_socket = socket(AF_INET, SOCK_STREAM, 0)) ==-1)
    {
       cout << "client创建套接字失败~"<< endl;
       exit(1);
    }
   serv_addr.sin_family = AF_INET;
   serv_addr.sin_port = htons(PORT);
   serv_addr.sin_addr.s_addr =inet_addr("127.0.0.1");
   bzero(&(serv_addr.sin_zero), 8);
   if((connect(client_socket, (struct sockaddr*)&serv_addr, sizeof(struct sockaddr))) ==-1)
    {
       cout << "client连接sever失败~"<< endl;
       exit(1);
    }else{
       cout<<"client connect successful!"<<endl;
}
   while(1)
    {
         cin>>buf;
         if((send(client_socket, buf, strlen(buf), 0)) ==-1)         //!> 发送回去
        {
            cout<< "发送错误!"<< endl;
        }
       if((recv_len = recv(client_socket, buf, sizeof(buf), 0)) ==-1)      //!> 接收数据
       {
           cout << "接收错误! "<< endl;
           exit(1);
       }
       buf[recv_len] = '\0';
          if( strcmp(buf, "quit" ) ==0 || strcmp( buf, "q" ) ==0 || strcmp( buf, "exit") ==0  )
          {
             cout<< "recv finish..."<< endl;
             exit( 0);
          }
          cout<< "返回:"<< buf<< endl;
    }
   close(client_socket);
   return 0;
}


0 0
原创粉丝点击