服務端程式,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;
}