在linux下開發自己的伺服器用戶端程式,我們追求一切程式從最小模型開始,就是最簡單最容易擴充的一種應用程式框架。
習慣,我喜歡將自己需要g++的檔案編寫在sh檔案中,每次,我只需要 sh g++.sh就ok了,在一切的可能情況下提高自己的工作效率。
linux用戶端模型
#include <iostream>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <arpa/inet.h>#define MAXLINE 100#define SA struct sockaddr#define SOCKET intusing namespace std;const char *ip = {"127.0.0.1"};const int port = 8124;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("hello nihao");//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;}
linux用戶端模型:
#include <iostream>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define MAXLINE 100#define SA struct sockaddr#define SOCKET intusing 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(8124); 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; }
你所需要的服務根據你的業務,進行擴充,這是伺服器入門層級的代碼哦。必須會。