Questions tagged «network-programming»

与创建和管理网络以及向(一组)程序添加网络连接性相关的编程。

3
UNIX非阻塞I / O:O_NONBLOCK与FIONBIO
在BSD套接字编程的上下文中,我遇到的每个示例和讨论中,似乎都建议将文件描述符设置为非阻塞I / O模式的推荐方法是使用O_NONBLOCK标志fcntl(),例如 int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK); 我从事UNIX的网络编程已经有十多年了,并且一直使用该FIONBIO ioctl()调用来执行此操作: int opt = 1; ioctl(fd, FIONBIO, &opt); 从来没有真正考虑过为什么。只是这样学习而已。 有没有人对一个或另一个可能有的优点发表评论?我认为可移植性的位置有所不同,但不知道在何种程度ioctl_list(2)上没有谈到单个ioctl方法的这一方面。

13
当您需要可靠的UDP时使用什么?
如果您遇到TCP连接可能太慢而UDP'连接'可能太不可靠的情况,该怎么使用?有各种各样的标准可靠的UDP协议,您对它们有什么经验? 请针对每个答复讨论一种协议,如果其他人已经提及您使用的协议,则可以考虑将其投票,并在需要时使用评论详细说明。 我对这里的各种选项感兴趣,其中TCP处于规模的一端,而UDP处于另一端。提供了各种可靠的UDP选项,每个选项都将TCP的某些元素引入UDP。 我知道,TCP通常是正确的选择,但是列出替代方案通常有助于帮助得出这一结论。基于UDP构建的诸如Enet,RUDP等之类的东西各有利弊,您使用过它们,您的经验是什么? 为避免疑问,没有更多的信息,这是一个假设性的问题,我希望能引出一系列答复,详细说明需要做出决定的人可以使用的各种选择和替代方案。

12
为什么在没有尝试I / O的情况下不可能检测到TCP套接字已被对等端正常关闭?
作为对最近一个问题的回应,我想知道为什么在Java中如果不尝试在TCP套接字上进行读/写操作就无法检测到套接字已被对等端正常关闭了,这是为什么?不管是使用pre-NIO Socket还是NIO,似乎都是这种情况SocketChannel。 当对等方正常关闭TCP连接时,连接两端的TCP堆栈都会知道这一事实。服务器端(启动关闭操作的服务器)以状态结束FIN_WAIT2,而客户端端(未明确响应关闭操作的服务器)以状态服务器结束CLOSE_WAIT。为什么没有一个方法Socket或SocketChannel可以查询TCP堆栈看到底层的TCP连接是否已经终止?TCP堆栈不提供此类状态信息吗?还是为了避免昂贵地调用内核而做出的设计决定? 在已经发布了该问题的一些答案的用户的帮助下,我认为我知道问题可能来自何处。没有显式关闭连接的那一侧将以TCP状态结束,CLOSE_WAIT这意味着该连接正在关闭过程中,并等待该一侧发出自己的CLOSE操作。我想这是公平的,以至于isConnected收益true和isClosed回报false,但为什么没有像isClosing? 以下是使用pre-NIO套接字的测试类。但是使用NIO可以获得相同的结果。 import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws Exception { final ServerSocket ss = new ServerSocket(12345); final Socket cs = ss.accept(); System.out.println("Accepted connection"); Thread.sleep(5000); cs.close(); System.out.println("Closed connection"); ss.close(); Thread.sleep(100000); } } import java.net.Socket; public class MyClient { public static …

7
PHP中的异步函数调用
我正在使用PHP Web应用程序,并且需要在请求中执行一些网络操作,例如根据用户的请求从远程服务器中获取某人。 假设我必须将一些数据传递给函数并且还需要从函数输出,是否有可能在PHP中模拟异步行为。 我的代码是这样的: <?php $data1 = processGETandPOST(); $data2 = processGETandPOST(); $data3 = processGETandPOST(); $response1 = makeNetworkCall($data1); $response2 = makeNetworkCall($data2); $response3 = makeNetworkCall($data3); processNetworkResponse($response1); processNetworkResponse($response2); processNetworkResponse($response3); /*HTML and OTHER UI STUFF HERE*/ exit; ?> 给定3个请求,每个网络操作大约需要5秒钟才能完成,因此总共增加了15秒钟的响应时间。 makeNetworkCall()函数仅执行HTTP POST请求。 远程服务器是一个第三方API,因此我对那里没有任何控制权。 PS:请不要回答有关AJAX或其他问题的建议。我目前正在寻找是否可以通过PHP进行此操作,它可能带有C ++扩展名或类似名称。

12
在Java中获取“外部” IP地址
我不太确定如何获取计算机的外部IP地址,就像网络外部的计算机会看到它一样。 我下面的IPAddress类仅获取计算机的本地IP地址。 public class IPAddress { private InetAddress thisIp; private String thisIpAddress; private void setIpAdd() { try { InetAddress thisIp = InetAddress.getLocalHost(); thisIpAddress = thisIp.getHostAddress().toString(); } catch (Exception e) { } } protected String getIpAddress() { setIpAdd(); return thisIpAddress; } }


5
包装和框架之间的区别
网络世界中常用的两个词-数据包和帧。 任何人都可以请您详细说明这两个词之间的区别吗? 希望听起来可能很愚蠢,但这是否表示如下 数据包是网络OSI模型的第3层(网络层-ip数据包)上的PDU(协议数据单元)。 帧是OSI模型的第2层(数据链路)的PDU。

17
Swift-获取设备的WIFI IP地址
我需要在Swift中获取iOS设备的IP地址。这不是其他有关此问题的重复!如果没有wifi IP地址,我只需要获取WiFi IP地址-我需要处理它。关于堆栈溢出有一些疑问,但是只有返回IP地址的函数。例如(从如何快速获取IP地址): func getIFAddresses() -> [String] { var addresses = [String]() // Get list of all interfaces on the local machine: var ifaddr : UnsafeMutablePointer<ifaddrs> = nil if getifaddrs(&ifaddr) == 0 { // For each interface ... for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) { …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.