TCP和UDP有什么区别?
我知道TCP用于非时间关键应用程序,UDP用于需要快速传输数据的游戏或应用程序.我知道TCP用于HTTP,HTTP,FTP,SMTP和Telnet.我知道UDP用于DNS和DHCP.
但为什么?TCP和UDP的哪些特性使它们对各自的用例有用?
为了尽可能地了解TCP套接字和websocket之间的差异,我已经在这些问题中找到了很多有用的信息:
等等...
在我的调查中,我在维基百科上看了这句话:
Websocket与TCP的不同之处在于它启用了消息流而不是字节流
我不完全确定它究竟意味着什么.你有什么解释?
传统的IPv4点分四元组符号用冒号分隔地址和端口,如环回接口上的Web服务器示例:
127.0.0.1:80
Run Code Online (Sandbox Code Playgroud)
但是使用IPv6表示法,地址本身可以包含冒号.例如,这是环回地址的简写形式:
::1
Run Code Online (Sandbox Code Playgroud)
端口(或其功能等价物)如何以IPv6地址/端口端点的文本表示形式表示?
我正在使用我正在使用的库的问题.它可能是图书馆,也可能是我使用它错了!
基本上,当我这样做时(以毫秒为单位的超时)
_ignitedHttp.setConnectionTimeout(1); // v short
_ignitedHttp.setSocketTimeout(60000); // 60 seconds
Run Code Online (Sandbox Code Playgroud)
没有生成超时异常并且它正常工作,但是,当我执行以下操作时,
_ignitedHttp.setConnectionTimeout(60000); // 60 seconds
_ignitedHttp.setSocketTimeout(1); // v short
Run Code Online (Sandbox Code Playgroud)
我得到一个Socket Exception.
所以,我的问题是为什么我不能模拟连接异常?我是否误解了套接字和连接超时之间的区别?图书馆在这里(尚未正式发布).
我很遗憾和我自己建立NGINX的新手,但我希望能够启用安全的websockets,而无需额外的层.
我不想在websocket服务器本身上启用SSL,而是想使用NGINX为整个事物添加SSL层.
每个网页都说我做不到,但我知道我可以做到!感谢任何人(我自己)可以告诉我如何!
套接字API是TCP/IP和UDP/IP通信的事实标准(即我们所知的网络代码).然而,它的核心功能之一,accept()有点神奇.
借用半正式定义:
在服务器端使用accept().它接受从远程客户端创建新TCP连接的接收传入尝试,并创建与此连接的套接字地址对关联的新套接字.
换句话说,accept返回一个新的套接字,服务器可以通过该套接字与新连接的客户端进行通信.旧套接字(在其accept上调用)保持打开状态,在同一端口上侦听新连接.
accept工作怎么样?它是如何实现的?这个话题有很多混乱.许多人声称接受打开一个新端口,并通过它与客户沟通.但这显然不是真的,因为没有新的端口被打开.你实际上可以通过同一个端口与不同的客户端进行通信,但是如何?当多个线程调用recv同一个端口时,数据如何知道去哪里?
我想这是客户端地址与套接字描述符相关联的内容,每当数据通过时recv它被路由到正确的套接字,但我不确定.
对这种机制的内部运作进行彻底的解释是很好的.
在C#中使用TcpClient的或一般连接到插座我怎么能先检查如果某个端口是免费在我的机器上?
更多信息: 这是我使用的代码:
TcpClient c;
//I want to check here if port is free.
c = new TcpClient(ip, port);
Run Code Online (Sandbox Code Playgroud) 我试图找出为什么我的应用程序的TCP/IP连接每10分钟(确切地说,在1-2秒内)打嗝.我运行Wireshark并发现在10分钟不活动后,另一端正在发送一个设置了重置(RST)标志的数据包.谷歌搜索告诉我"RESET标志表示接收器已经变得混乱,因此想要中止连接"但这有点不足我需要的细节.可能是什么导致了这个?并且沿途的某个路由器是否有可能对此负责,或者这总是来自另一个端点?
编辑:我的计算机和另一个端点之间有一个路由器(特别是Linksys WRT-54G) - 在路由器设置中我应该寻找什么?
我正在尝试执行端口转发,以在Windows上使用TCP协议连接两个仿真器.虽然我已从控制面板启用了TCP客户端程序,但在命令提示符中无法识别"telnet"命令.任何人都可以帮我解决这个问题吗?提前致谢.