linux伺服器-用戶端通訊雛形

來源:互聯網
上載者:User

服務端程式,linux下編譯通過

#include
#include
#include
#include

#define MAXLINE 100
#define SA struct sockaddr
#define SOCKET int

using namespace std;

int main()
{
 cout << "this is a server!" << endl;
 struct sockaddr_in server,client;

 SOCKET listen_sock = socket(AF_INET, SOCK_STREAM, 0); // 建立監聽通訊端
 if(listen_sock < 0)
 {
  perror("socket error");
  return -1;
 }

 memset((char *)&server, 0, sizeof(server));
 server.sin_family = AF_INET;
 server.sin_port = htons(8888);
 if(bind(listen_sock, (SA *)&server, sizeof(server)) < 0) // 綁定監聽連接埠
 {
  perror("bind error");
  return -1;
 }

 listen(listen_sock, 5); // 監聽 sockfd 一個已綁定未被串連的通訊端描述符   backlog 隊列
 
 socklen_t n = (socklen_t)sizeof(client);
 SOCKET conn_sock = (SOCKET)accept(listen_sock, (SA *)&client, &n); // 建立串連通訊端
 if(conn_sock < 0)
  perror("accept error");
 else
 {
  // 接受client請求資訊
  unsigned char buf[MAXLINE+1];
  memset(buf, 0, sizeof(buf));
  if((n = recv(conn_sock, buf, MAXLINE, 0)) < 0)
   perror("recv error");
  else
  {
   buf[n] = 0;
   cout << "recv from client : " << buf << endl;
  }
  // 伺服器處理業務///
  //    ////
  ////////////////////

  // 返回伺服器處理結果字串
  if(send(conn_sock, "server!", 7, 0) < 0)
   perror("send error");
 
  close(conn_sock);
 }
 close(listen_sock);
 return 0; 
}

用戶端程式

#include
#include
#include
#include
#include

#define MAXLINE 100
#define SA struct sockaddr
#define SOCKET int

using namespace std;

const char *ip = {"127.0.0.1"};
const int port = 8888;

int main()
{
 cout << "this is a client!" << endl;
 cout << "conn server ip:" << ip << endl;
 cout << "conn server port:" << port << endl;

 SOCKET sockfd;
 if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
 {// 建立一個通訊端,tcp協議,流通訊端,通訊協定
  perror("socket error");
  return -1;
 }
 struct sockaddr_in servaddr; // 通訊地址類型變數
 memset(&servaddr, 0, sizeof(servaddr));
 servaddr.sin_family = AF_INET;
 servaddr.sin_port = htons(port);
 struct hostent *hp;
 hp = gethostbyname(ip);
 memcpy((char*)&servaddr.sin_addr, (char*)hp->h_addr, hp->h_length);

 if(connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) < 0) // 建立串連
 {
  perror("connect error");
  return -1;
 }

 cout << "YOU:" << endl;
 string message;
 cin >> message;
 if(send(sockfd, message.c_str(), message.size(), 0) < 0) // 發送請求字串
 {
  perror("send error");
  return -1;
 }

 int n;
 char recvline[MAXLINE+1];
 while((n = recv(sockfd, recvline, MAXLINE, 0)) > 0) // 接受,阻塞
 {
  recvline[n] = 0;
  cout << "recv from server: "<< recvline <<endl;
 }
 if(n < 0)
  perror("recv error");

 close(sockfd); // 關閉通訊端串連

 return 0; 
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.