Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我们不在TCP程序中使用客户端地址?_C_Sockets_Tcp - Fatal编程技术网

为什么我们不在TCP程序中使用客户端地址?

为什么我们不在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

我是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地址?服务器如何识别客户端计算机的端口和地址?请解释关于服务器和客户端的全部概念

为什么我们不在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我已经回答了他所有的好问题。你的评论完全把我难住了,那不是事实。这些批评言论后来被删掉了。但我想你知道,否则你就不会做编辑了。