草庐IT

Socket聊天

全部标签

networking - 如何控制peer上的socket[TCP Hole Punching]

我有一个使用TCP连接进行通信的服务器-客户端程序。多个客户端可以同时连接到服务器。我想在这个系统上实现tcpholepunching。在客户端,它调用公共(public)服务器来查找我的服务器的公共(public)ip、端口。然后连接到它。但是在服务器端它必须打开一个端口来连接到公共(public)服务器,并且它还必须在同一个端口上接受客户端连接请求。我要做的是打开一个套接字并绑定(bind)到端口X,然后连接到公共(public)服务器,然后将这个套接字更改为监听状态以接受传入连接一段时间,然后开始连接到公共(public)服务器一次又一次。这是正确的方法吗?编辑:我有另一个想法。

c# - 为什么在调用 Socket.BeginSend 后我的发送回调执行得如此之快?

当我向远程机器发送大量数据时,发送回调几乎立即执行。[05:10:35:981]ChildSocket.Send():Sending1048508bytes.[05:10:35:988]ChildSocket.SendCallback():Sent1048508bytes.我的网速不可能在7毫秒内成功发送近1兆字节。由于这种行为,我的印象是调用BeginSend只是将发送缓冲区写入操作系统,操作系统会在适当的时候发送它。这种怀疑是否正确?为什么发送回调执行得这么快? 最佳答案 是的,操作系统会缓冲数据(尽管1MB似乎很多)。Send

java - 带多线程服务器 (TCP/IP) 的客户端/服务器聊天室

我正在使用TCP/IP在Java中开发多客户端/服务器应用程序。我的服务器为每个clientSockets创建一个新线程(clientSocket=serverSocket.accept();)。问题似乎在于找出一种让所有正在运行的线程相互了解的方法(即向聊天中的所有在线用户广播消息)。让我的每个线程知道新用户何时连接到服务器以及用户何时与服务器断开连接的有效方法是什么? 最佳答案 我在你的位置上会创建一个额外的队列线程,它引用了套接字线程和消息队列。您所有的套接字线程都可以将消息排队到队列线程,然后队列线程将消息发送到您所有的套接

tcp - dns2tcp 错误 socket.c :107 bind error

当我尝试使用sudodns2tcpd-F-d3-f~/etc/dns2tcpdrc.conf设置我的DNS服务器以使用dns2tcp时,我收到错误Errorsocket.c:107绑定(bind)错误我该如何解决这个问题? 最佳答案 在53端口运行的东西。查找使用sudonetstat-anp|grep:53然后使用killPIDjustseethisimage 关于tcp-dns2tcp错误socket.c:107binderror,我们在StackOverflow上找到一个类似的问题

java - 如何添加在 Java 聊天应用程序上连接的所有客户端的列表?

我在网上找到了这个客户端-服务器聊天代码,但想修改它以显示连接到每个客户端的客户端列表,这样用户就知道谁连接了,谁离开了聊天。客户端类:packageedu.lmu.cs.networking;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.So

c# - 如何从 Socket 获取 IP 地址

我正在尝试获取绑定(bind)到receiveSock的IP地址。我怎样才能得到它。问题1:ipEndReceive=newIPEndPoint(IPAddress.Any,receivePort);receiveSock=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);receiveSock.Bind(ipEndReceive);当代码到达绑定(bind)函数时。发生错误InvalidArgument,ErrorCode:10022,Message:Aninvalidargumentwa

重用套接字时 C# TCP Socket.Receive 问题

前言:我已经被这个困扰了一段时间,但我并没有找到我需要的东西。我有一个C#(.NET3.5)服务。一个线程充当传入TCP连接的异步监听器。当数据进来时,我会产生一个新的工作线程来处理数据,并发回一个确认。在同一服务的第二个线程上,我们发送命令,直到今天它会从数据库收集信息,构建一个新的套接字,连接然后发送命令,我正在使用Socket.Receive调用阻塞和等待响应(或直到发生超时)。一切都很好,直到一个新的客户端需要以如此快的速度(5-10秒间隔)向我们发送数据,以至于我们无法再打开一个新的套接字来获取命令。因此,我开始研究何时需要发送“监听器”线程已连接客户端的命令。如果该客户端当

Java TCP Socket 接收指定长度的字节

我试图首先读取指定消息大小的4个字节(int),然后根据字节数读取剩余的字节。我正在使用以下代码来完成此操作:DataInputStreamdis=newDataInputStream(mClientSocket.getInputStream());//readthemessagelengthintlen=dis.readInt();Log.i(TAG,"Readingbytesoflength:"+len);//readthemessagedatabyte[]data=newbyte[len];if(len>0){dis.readFully(data);}else{return"";

java - jdk socket实现了哪些协议(protocol)

如果我没理解错的话,我们使用java.io/java.nio.*来实现一个应用,应该是ISO5层模型的应用层实现(可能不准确)。我认为JDK应该实现更底层(传输层、网络层甚至L2、L1),如果是,基于哪些协议(protocol)。如果没有,请介绍一下? 最佳答案 可能你对它的了解非常基础,所以混淆了很多东西。java.nio等提供应用层(OSI第7层)或套接字(套接字比应用层低一点,因为您可以在它们之上制作http、ftp等),它们确实实现了所有较低层也。如果没有较低层,您实际上无法发送单个数据包,因此无法通信。程序员是否有权访问这

node.js - NodeJS TCP Socket 不显示客户端主机名信息

假设我已经创建了一个简单的node.jsTCPSocket服务器,如下所示。varserver=net.createServer(function(socket){socket.end("goodbye\n");});//listenonport80,likeawebserverwould,andconfiguredtoacceptconnectionstomultiplehosts,ietest.example.com,sdfsdfsdf.example.com,example2.com.server.listen(80,function(){address=server.addre