草庐IT

Networking

全部标签

android - 在没有服务器的情况下在 2 部安卓手机之间传输数据?

我有一个关于应用程序的想法,但没有Android开发或网络方面的经验,所以无论是否可行,我都想得到一些原始反馈。我想在不使用服务器的情况下使用WiFi/移动网络在两部或多部Android手机之间传输文件、文本等。也许一个设备所有者可以发送一个特定的字符串来唯一标识该设备,即IP地址,到它想与之共享数据的其他设备。例如,A要发送一些文件给B,他告诉B他的标识字符串是“192.168.1.1:4321”。B现在在其设备上的应用程序中输入此字符串。也许可以通过这种方式在两个设备之间建立连接。有两种可能的情况:A和B彼此靠近,因此他们可以访问同一个WiFi网络。A和B位于不同的地理位置,因此都

c - 如何从 TCP header 打印序列号和确认号

我正在做一个项目,需要从TCPheader中打印出TCP序列号和TCP确认号。以下是我所做的ip=(structiphdr*)buffer;//bufferisusedtostorethepacketthatIreceivedtcp=(structtcphdr*)(buffer+(4*ip->ihl));printf("TCPsequencenumber=%d\n",ntohl(tcp->seq));printf("TCPacknumber=%d\n",ntohl(tcp->ack_seq));为了确保我正确收到数据包,我还打印了其他信息,例如ip->saddr,tcp->source

android - 向 wifi 连接的设备发送一个字符串,在 android 中返回 EHOSTUNREACH(没有到主机的路由)

所以,应用程序的流程是,首先,我使用我的android手机通过wifi连接一个设备(这是一个服务器),然后,我想向该设备发送一个字符串,仅此而已。问题是,当我尝试这样发送时newThread(newRunnable(){@Overridepublicvoidrun(){try{Socketsocket=newSocket("192.168.8.101",2001);DataOutputStreamDOS=newDataOutputStream(socket.getOutputStream());DOS.writeUTF("61");socket.close();}catch(Excep

networking - 处理实时游戏中的网络丢包 - TCP 和 UDP

为我的第一个网络游戏阅读了很多这方面的资料,我了解了TCP与UDP的保证交付与交付时间的核心区别。我也读过截然相反的观点,实时游戏应该使用UDP还是TCP!;)没有人很好地介绍如何处理丢包问题。TCP:阅读一篇使用TCP获得FPS的文章,该文章建议仅使用TCP。使用TCP客户端输入的权威服务器将如何处理丢包和突然的史诗般的滞后峰值?游戏是否只​​是暂停片刻然后从停止的地方继续?TCP数据包丢失是否非常罕见,以至于这并不是什么大问题,TCP上的FPS实际上运行良好?UDP:另一篇文章建议只使用UDP。显然,像“throw手榴弹”这样的一次性UDP事件不够可靠,因为它们有时不会触发。您是否

c - 原始套接字中的 TCP 数据包 - Centos 6.6

我尝试执行TCP流量并在另一端使用RAW套接字捕获该数据包。我将窗口大小设置为50000字节。同时以最大速率发送TCP流量。我在wireshark中观察到每12个数据包(1512字节数据包)发送一个ACK​​。在原始套接字中接收数据包时。我预计会有12个数据包,就像我进入wireshark一样(我相信wireshark也使用原始套接字)。但是我很惊讶地看到一个数据包有发送数据流。据我所知,RAW套接字应该以有线传输的数据包形式接收,而不是TCP流。我在下面使用原始套接字在端口接收数据包rawsd=socket(PF_PACKET,SOCK_RAW,ETH_P_ALL);这是否与tcp_

networking - 为什么 TCP/IP header 的大小必须是 32 位的倍数?

我已经搜索过,但大多数书籍只是说有填充可以使header成为32位的倍数。为什么必须是32位的倍数? 最佳答案 原因是memoryalignment.我将从一个类比开始-想象一个有1000个文件抽屉的巨大文件室。这个房间由100个单独的橱柜组成,每个橱柜有10个抽屉。每个抽屉可以放一张纸,而您的秘书(负责处理抽屉中的数据)一次可以处理10张数据。尽管处理的数据量相同,但告诉秘书“去处理机柜#83”比“去处理机柜12中的抽屉5-10和机柜13中的抽屉1-5”更简单、更有效.CPU大致相同。CPU(秘书)通常不会一次处理一个字节(抽屉)

java - 在java中获取远程tcp连接的ip地址?

我用过著名的优秀KnockKnockservertutorial作为学习java网络的一种方式。我试图使用socket.getInetAddress()找出已连接客户端的ip地址,但它总是返回我的路由器的ip,192.168.1.254,大概是因为连接在那里弹跳。有什么方法可以获取连接到tcp套接字的远程客户端的正确ip? 最佳答案 试试这个:ServerSocketsSock;SocketcSock;sSock=newServerSocket(port_number);cSock=sSock.accept();System.out

检查 C 中可达的端口

我有一个C函数来检查主机及其端口,当我使用FQDN主机名时,该函数返回错误,如:connect()失败:连接超时,但如果我改用IP地址,似乎没问题,如何解决这个问题?谢谢。#include#include#include#include#include#include#include#includeintis_network_up(char*chkhost,unsignedshortchkport){intsock;structsockaddr_inchksock;structhostent*host=NULL;if((sock=socket(PF_INET,SOCK_STREAM,I

c - 在 TCP 服务器套接字上接收 C 中的数据

我一直在尝试使用以下代码从客户端接收服务器套接字上的数据,服务器.cintstartServer(uint16_tmyPort){intlistenFd=0,connfd=0;structsockaddr_inserv_addr;listenFd=socket(AF_INET,SOCK_STREAM,6);if(listenFd==-1){perror("socket");returnEXIT_FAILURE;}memset(&serv_addr,'0',sizeof(serv_addr));serv_addr.sin_family=AF_INET;serv_addr.sin_addr

c - 了解用于接收 UDP 消息和打开 TCP 套接字的选择循环

您好,我正在为一个网络类项目工作,我们在网络中创建节点,通过udp从控制应用程序接收消息,然后创建与其他节点的tcp连接。基本顺序是:1)控制管理器向节点A发送udp消息,告诉它连接到节点B2)节点A接收udp消息并将udp消息转发给节点B3)节点B接收udp消息,随机选择一个端口号,在该端口上打开一个监听的tcp套接字,并使用端口号将udp消息发送回A4)节点A接收到udp消息并在该tcp端口上打开到节点B的连接。基本上,我想循环接收到的udp消息并跳转到我的消息解析函数,同时循环tcp连接。那部分看起来很简单,但我真的不明白如何将监听套接字添加到文件描述符列表中。下面的代码是我放在