为什么我们不在 TCP 程序中使用客户端地址?
why we don't use client address inside TCP programe?
我是 TCP 套接字编程的初学者。我想澄清一些关于 TCP 编程概念的疑问。我有一个客户端和服务器程序。这是我的 C 代码。
服务器代码:
#define MYPORT 39937
struct sockaddr_in serveraddress,cliaddr;
sd = socket( AF_INET, SOCK_STREAM, 0 );
memset( &serveraddress, 0, sizeof(serveraddress) );
serveraddress.sin_family = AF_INET;
serveraddress.sin_port = htons(MYPORT);//PORT NO
serveraddress.sin_addr.s_addr = htonl(INADDR_ANY);//ADDRESS
retbind=bind(sd,(struct sockaddr*)&serveraddress,sizeof(serveraddress));
connfd=accept(sd,(struct sockaddr*)&cliaddr,&len);
客户代码:
struct sockaddr_in serveraddress;
sd = socket( AF_INET, SOCK_STREAM, 0 );
argv[1]//for ip address
argv[2]//for port
argv[3]//for string to send
memset( &serveraddress, 0, sizeof(serveraddress) );
serveraddress.sin_family = AF_INET;
serveraddress.sin_port = htons(atoi(V[2]));//PORT NO
serveraddress.sin_addr.s_addr = inet_addr(V[1]);//ADDRESS
if(connect(sd,(struct sockaddr*)&serveraddress,
sizeof(serveraddress)) < 0)
{
printf("Cannot Connect to server");
exit(1);
}
write(sd, V[3], strlen(V[3]));
我知道客户端程序初始化服务器的端口和IP地址。是真的吗?如果这是真的那么为什么我们在服务器程序中使用端口和 IP 地址?
我很迷惑 。另一个问题为什么我们不在客户端程序中使用客户端端口和 IP 地址?服务器如何识别客户端机器的这个端口和地址?请解释有关服务器和客户端的完整概念
- why we don't use client address inside TCP program?
因为我们通常不需要。见下文。
- I know that client program initialize the port and ipaddress of server. Is it true?
客户端需要知道服务器的IP地址和端口,并用它来初始化一个数据结构来连接它,但这样说是不准确的客户端以任何方式初始化服务器的任何内容。
- If it is true then why we use port and ipaddress inside server program? I am confused.
服务器需要初始化自己的IP地址和端口,才能监听。客户端需要在其自己的内存space中初始化另一个数据结构以连接到服务器。仅仅因为它具有相同的名称并不意味着它是同一块内存。
- another question why we don't use client port and ipaddress inside client program?
客户端不需要知道自己的地址和端口。
- how server identifies this port and address of client machine?
没有。它不需要知道。它有一个连接到客户端的套接字。在大多数情况下,这就是它所需要的。客户端发送连接请求;服务器通过同一连接回复。
- Please explain the entire concepts about server and client
范围太广。
I know that client program initialize the port and ipaddress of server . Is it true ?
客户端应用必须指定要连接的特定远程服务器IP/port,是的。
why we use port and ipaddress inside server program ?
服务器应用程序可以指定一个特定它想要监听的本地端口。如果未指定端口,OS 会随机选择一个可用端口。无论哪种方式,这都是客户端连接到的端口。
服务器机器可能有多个本地IP,如果它连接到多个网络,所以服务器应用程序可能指定一个具体 本地 IP 监听。如果未指定 IP,服务器将侦听 所有 个本地 IP。这用于控制允许客户端连接的网络。
why we don't use client port and ipaddress inside client program ?
如果需要,您可以。这是可选的。
一台客户端机器可能有多个本地IP,如果它连接到多个网络。客户端可以指定一个特定本地IP进行连接,如果它知道特定网络连接到达服务器。如果未指定 IP,OS 使用其内部路由表确定要使用的网络,然后从该本地 IP 连接。
客户端应用程序可以指定它想要连接的本地端口。一些协议需要这个,或者 firewall/router 策略可能需要它。如果未指定端口,OS 会随机选择一个可用端口。无论哪种方式,这都是客户端连接的端口。
how server identifies this port and address of client machine ?
accept()
和 getpeername()
报告正在与服务器通信的客户端的远程 IP/port。
Please Explain the entire concepts about server and client
有整本关于该主题的书籍。它超出了 Whosebug 的范围。
我是 TCP 套接字编程的初学者。我想澄清一些关于 TCP 编程概念的疑问。我有一个客户端和服务器程序。这是我的 C 代码。 服务器代码:
#define MYPORT 39937
struct sockaddr_in serveraddress,cliaddr;
sd = socket( AF_INET, SOCK_STREAM, 0 );
memset( &serveraddress, 0, sizeof(serveraddress) );
serveraddress.sin_family = AF_INET;
serveraddress.sin_port = htons(MYPORT);//PORT NO
serveraddress.sin_addr.s_addr = htonl(INADDR_ANY);//ADDRESS
retbind=bind(sd,(struct sockaddr*)&serveraddress,sizeof(serveraddress));
connfd=accept(sd,(struct sockaddr*)&cliaddr,&len);
客户代码:
struct sockaddr_in serveraddress;
sd = socket( AF_INET, SOCK_STREAM, 0 );
argv[1]//for ip address
argv[2]//for port
argv[3]//for string to send
memset( &serveraddress, 0, sizeof(serveraddress) );
serveraddress.sin_family = AF_INET;
serveraddress.sin_port = htons(atoi(V[2]));//PORT NO
serveraddress.sin_addr.s_addr = inet_addr(V[1]);//ADDRESS
if(connect(sd,(struct sockaddr*)&serveraddress,
sizeof(serveraddress)) < 0)
{
printf("Cannot Connect to server");
exit(1);
}
write(sd, V[3], strlen(V[3]));
我知道客户端程序初始化服务器的端口和IP地址。是真的吗?如果这是真的那么为什么我们在服务器程序中使用端口和 IP 地址? 我很迷惑 。另一个问题为什么我们不在客户端程序中使用客户端端口和 IP 地址?服务器如何识别客户端机器的这个端口和地址?请解释有关服务器和客户端的完整概念
- why we don't use client address inside TCP program?
因为我们通常不需要。见下文。
- I know that client program initialize the port and ipaddress of server. Is it true?
客户端需要知道服务器的IP地址和端口,并用它来初始化一个数据结构来连接它,但这样说是不准确的客户端以任何方式初始化服务器的任何内容。
- If it is true then why we use port and ipaddress inside server program? I am confused.
服务器需要初始化自己的IP地址和端口,才能监听。客户端需要在其自己的内存space中初始化另一个数据结构以连接到服务器。仅仅因为它具有相同的名称并不意味着它是同一块内存。
- another question why we don't use client port and ipaddress inside client program?
客户端不需要知道自己的地址和端口。
- how server identifies this port and address of client machine?
没有。它不需要知道。它有一个连接到客户端的套接字。在大多数情况下,这就是它所需要的。客户端发送连接请求;服务器通过同一连接回复。
- Please explain the entire concepts about server and client
范围太广。
I know that client program initialize the port and ipaddress of server . Is it true ?
客户端应用必须指定要连接的特定远程服务器IP/port,是的。
why we use port and ipaddress inside server program ?
服务器应用程序可以指定一个特定它想要监听的本地端口。如果未指定端口,OS 会随机选择一个可用端口。无论哪种方式,这都是客户端连接到的端口。
服务器机器可能有多个本地IP,如果它连接到多个网络,所以服务器应用程序可能指定一个具体 本地 IP 监听。如果未指定 IP,服务器将侦听 所有 个本地 IP。这用于控制允许客户端连接的网络。
why we don't use client port and ipaddress inside client program ?
如果需要,您可以。这是可选的。
一台客户端机器可能有多个本地IP,如果它连接到多个网络。客户端可以指定一个特定本地IP进行连接,如果它知道特定网络连接到达服务器。如果未指定 IP,OS 使用其内部路由表确定要使用的网络,然后从该本地 IP 连接。
客户端应用程序可以指定它想要连接的本地端口。一些协议需要这个,或者 firewall/router 策略可能需要它。如果未指定端口,OS 会随机选择一个可用端口。无论哪种方式,这都是客户端连接的端口。
how server identifies this port and address of client machine ?
accept()
和 getpeername()
报告正在与服务器通信的客户端的远程 IP/port。
Please Explain the entire concepts about server and client
有整本关于该主题的书籍。它超出了 Whosebug 的范围。