我想學習和理解BSD套接字編程使用這些簡單的示例C++代碼爲TCP-IP服務器和客戶端。我已經讀過像socket(),bind(),listen(),accept()和read/recv()這樣的標準API,甚至可以在g ++/Linux上編譯下面的代碼。簡單的套接字編程代碼工作
我想要做的是看到它在現實生活中的工作,我的意思是運行服務器代碼,然後使用客戶端連接到它並從客戶端到服務器發送數據,並反之亦然,並驗證收到的數據。所有這一切都在同一網段的兩個Linux盒子(Ubuntu)中。我有私人的IPv4地址給這兩臺Linux機器。
在上述網絡設置中,需要通過什麼設置來實現此目的,以及在下面的服務器和客戶端代碼中更改哪些代碼?我想真正看到它在網絡上實時工作?
還有任何進一步的指向代碼,博客文章學習動手套接字編程/網絡編程將有所幫助。
//TCP SERVER
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <arpa/inet.h>
//#include <fcntl.h>
#include <unistd.h>
main()
{
char buf[100];
socklen_t len;
int k,sock_desc,temp_sock_desc;
struct sockaddr_in client,server;
memset(&client,0,sizeof(client));
memset(&server,0,sizeof(server));
sock_desc = socket(AF_INET,SOCK_STREAM,0);
server.sin_family = AF_INET; server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = 7777;
k = bind(sock_desc,(struct sockaddr*)&server,sizeof(server));
k = listen(sock_desc,20); len = sizeof(client);
temp_sock_desc = accept(sock_desc,(struct sockaddr*)&client,&len);
while(1)
{
k = recv(temp_sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
break;
if(k>0)
printf("%s",buf);
} close(sock_desc);
close(temp_sock_desc);
return 0;
}
//TCP CLIENT
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <arpa/inet.h>
//#include <fcntl.h>
#include <unistd.h>
main()
{
char buf[100];
struct sockaddr_in client;
int sock_desc,k;
sock_desc = socket(AF_INET,SOCK_STREAM,0);
memset(&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr("127.0.0.1");
client.sin_port = 7777;
k = connect(sock_desc,(struct sockaddr*)&client,sizeof(client));
while(1)
{
gets(buf);
k = send(sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
break;
}
close(sock_desc);
return 0;
}
那麼你嘗試了什麼,發生了什麼? – Useless 2012-02-08 17:45:47
這是你能找到的最簡單的例子嗎? – Beta 2012-02-08 17:45:59
@Useless我在Linux終端上將服務器代碼作爲可執行文件執行。在同一個盒子的另一個終端上,我執行了客戶端代碼。在客戶端可執行的終端窗口上鍵入一些內容。沒有在服務器上收到任何信息。這就是我想了解的數據流如何在這些套接字代碼示例中發生。 – goldenmean 2012-02-08 17:48:39