标签: sockets

网络编程中的流和数据报有什么区别?

套接字(流)与套接字(数据报)之间有什么区别?为什么用一个而不是另一个?

sockets network-programming datagram

125
推荐指数
2
解决办法
6万
查看次数

并发调用同一套接字上的send/recv是否有效?

  1. 我们可以在同一个套接字上调用一个线程的发送和另一个线程的recv吗?
  2. 我们可以从同一个套接字上的不同线程并行调用多个发送吗?

我知道一个好的设计应该避免这种情况,但我不清楚这些系统API将如何表现.我也找不到相同的好文档.

方向上的任何指针都会有所帮助.

c sockets networking

119
推荐指数
2
解决办法
5万
查看次数

socket.shutdown vs socket.close

我最近看到了一些看起来像这样的代码(当然sock是一个套接字对象):

sock.shutdown(socket.SHUT_RDWR)
sock.close()
Run Code Online (Sandbox Code Playgroud)

在套接字上调用shutdown然后关闭它的目的究竟是什么?如果它有所不同,则此套接字用于非阻塞IO.

python sockets asynchronous

118
推荐指数
4
解决办法
13万
查看次数

socket API accept()函数如何工作?

套接字API是TCP/IP和UDP/IP通信的事实标准(即我们所知的网络代码).然而,它的核心功能之一,accept()有点神奇.

借用半正式定义:

在服务器端使用accept().它接受从远程客户端创建新TCP连接的接收传入尝试,并创建与此连接的套接字地址对关联的新套接字.

换句话说,accept返回一个新的套接字,服务器可以通过该套接字与新连接的客户端进行通信.旧套接字(在其accept上调用)保持打开状态,在同一端口上侦听新连接.

accept工作怎么样?它是如何实现的?这个话题有很多混乱.许多人声称接受打开一个新端口,并通过它与客户沟通.但这显然不是真的,因为没有新的端口被打开.你实际上可以通过同一个端口与不同的客户端进行通信,但是如何?当多个线程调用recv同一个端口时,数据如何知道去哪里?

我想这是客户端地址与套接字描述符相关联的内容,每当数据通过时recv它被路由到正确的套接字,但我不确定.

对这种机制的内部运作进行彻底的解释是很好的.

sockets networking tcp

118
推荐指数
3
解决办法
5万
查看次数

正确关闭WebSocket(HTML5,Javascript)

我正在玩HTML5 WebSockets.我想知道,如何优雅地关闭连接?比如,如果用户刷新页面或只是关闭浏览器会发生什么?

当用户只是在没有调用的情况下刷新页面时,会出现一种奇怪的行为websocket.close()- 当他们在刷新后返回时会触发该websocket.onclose事件.

javascript sockets html5 websocket

118
推荐指数
4
解决办法
15万
查看次数

套接字:使用Java发现端口可用性

如何使用Java以编程方式确定给定计算机中端口的可用性?

即给定一个端口号,确定它是否已被使用?

java sockets port

117
推荐指数
6
解决办法
13万
查看次数

java.net.SocketException:连接重置

我试图从套接字读取时出现以下错误.我做了readInt()InputStream,并且我得到这个错误.仔细阅读文档,这表明连接的客户端部分关闭了连接.在这种情况下,我是服务器.

我可以访问客户端日志文件并且它没有关闭连接,事实上它的日志文件建议我关闭连接.那么有人知道为什么会这样吗?还有什么要检查的?当有可能达到阈值的本地资源时,是否会出现这种情况?


我注意到我有以下几行:

socket.setSoTimeout(10000);
Run Code Online (Sandbox Code Playgroud)

就在之前readInt().这是一个原因(长篇故事),但只是好奇,是否存在可能导致指示错误的情况?我在我的IDE中运行了服务器,我碰巧让我的IDE卡在断点上,然后我注意到完全相同的错误开始出现在我自己的IDE中.

无论如何,只要提一下,希望不是红鲱鱼.:-(

java sockets connection networking socketexception

114
推荐指数
7
解决办法
69万
查看次数

将一个简单的套接字转换为SSL套接字

我编写了简单的C程序,它们使用套接字('client'和'server').(UNIX/Linux用法)

服务器端只是创建一个套接字:

sockfd = socket(AF_INET, SOCK_STREAM, 0);
Run Code Online (Sandbox Code Playgroud)

然后将它绑定到sockaddr:

bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
Run Code Online (Sandbox Code Playgroud)

并倾听(并接受和阅读):

listen(sockfd,5);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
read(newsockfd,buffer,255);
Run Code Online (Sandbox Code Playgroud)

客户端创建套接字,然后写入它.

现在,我想将这个简单的连接转换为SSL连接,以最简洁,最田园,最新和最快的方式.

我试图将OpenSSL添加到我的项目中,但我找不到一种简单的方法来实现我想要的东西.

c unix sockets linux ssl

108
推荐指数
3
解决办法
13万
查看次数

套接字编程和Http编程之间的区别

套接字编程和Http编程有什么区别?有人可以帮忙吗?

sockets network-programming

108
推荐指数
4
解决办法
6万
查看次数

socket connect()vs bind()

两者connect()bind()系统调用都将套接字文件描述符"关联"到一个地址(通常是ip/port组合).他们的原型如下: -

int connect(int sockfd, const struct sockaddr *addr,
               socklen_t addrlen);
Run Code Online (Sandbox Code Playgroud)

int bind(int sockfd, const struct sockaddr *addr,
            socklen_t addrlen);
Run Code Online (Sandbox Code Playgroud)

2个电话之间的确切区别是什么?应该connect()何时使用何时bind()

具体来说,在一些示例服务器客户端代码中,发现客户端正在使用connect()而服务器正在使用该bind()调用.理由并不完全清楚.

c sockets network-programming

104
推荐指数
5
解决办法
10万
查看次数