为什么我们不在TCP程序中使用客户端地址?
我是TCP套接字编程的初学者。我想澄清一些关于TCP编程概念的疑问。我有一个客户端和服务器程序。这是我的C代码。 服务器代码:为什么我们不在TCP程序中使用客户端地址?,c,sockets,tcp,C,Sockets,Tcp,我是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_f
#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地址?服务器如何识别客户端计算机的端口和地址?请解释关于服务器和客户端的全部概念
为什么我们不在TCP程序中使用客户端地址?
因为我们通常不需要。见下文
我知道客户端程序初始化服务器的端口和IP地址。这是真的吗?
客户机需要知道服务器的IP地址和端口,并使用它来初始化数据结构以连接到服务器,但是说客户机以任何方式初始化服务器的任何内容都是不准确的
如果这是真的,那么为什么我们在服务器程序中使用端口和IP地址呢?我很困惑。
服务器需要初始化自己的IP地址和端口,以便能够侦听它。客户端需要在其自己的内存空间中对另一个数据结构进行初始化,以连接到服务器。仅仅因为它有相同的名字并不意味着它是同一段记忆
另一个问题是为什么我们不在客户端程序中使用客户端端口和IP地址?
客户端不需要知道自己的地址和端口
服务器如何识别客户端计算机的端口和地址?
没有。不需要知道。它有一个连接到客户端的套接字。在大多数情况下,这就是它所需要的。客户端在连接上发送请求;服务器通过相同的连接进行应答
请解释关于服务器和客户端的全部概念
太宽了
我知道客户端程序初始化服务器的端口和IP地址。这是真的吗
客户端应用程序必须指定要连接到的特定远程服务器IP/端口,是
为什么我们在服务器程序中使用端口和IP地址
服务器应用程序可以指定它要侦听的特定本地端口。如果未指定端口,操作系统将随机选择一个可用端口。无论哪种方式,这都是客户端连接到的端口
如果服务器计算机连接到多个网络,则可能有多个本地IP,因此服务器应用程序可能会指定要侦听的特定本地IP。如果未指定IP,服务器将侦听所有本地IP。这用于控制允许客户端从哪些网络连接
为什么我们不在客户端程序中使用客户端端口和IP地址
你可以,如果你需要的话。这是可选的
如果客户端计算机连接到多个网络,则它可能具有多个本地IP。如果客户机知道到达服务器的特定网络连接,则可以指定要从中连接的特定本地IP。如果未指定IP,操作系统将使用其内部路由表确定要使用的网络,然后从该本地IP进行连接
客户端应用程序可以指定要从中连接的本地端口。某些协议需要这样做,或者防火墙/路由器策略可能需要这样做。如果未指定端口,操作系统将随机选择一个可用端口。无论哪种方式,这都是客户端连接的端口
服务器如何识别客户端计算机的端口和地址
accept和getpeername报告与服务器通信的客户端的远程IP/端口
请解释关于服务器和客户端的全部概念
关于这个问题有很多书。这超出了StackOverflow的范围。看看你基本上是在问TCP是如何工作的。你为什么不先读一本关于它的书呢?这是不公平的。他的问题是好的,即使说得不好。我希望一个拥有139k声望的人花时间编辑和改进这个问题,而不是用讽刺的回答。@BrianWhite我已经回答了他所有的好问题。你的评论完全把我难住了,那不是事实。这些批评言论后来被删掉了。但我想你知道,否则你就不会做编辑了。