我正在用Java编写一个客户端-服务器应用程序,客户端和服务器可以通过UDP套接字进行交互,通过TCP套接字进行乒乓交互,用户(客户端)可以通过TCP套接字进行聊天。
我有两个独立的TCP和UDP线程。我将服务器的TCP和UDP功能融合在一起(只需启动TCP和UDP线程)。但我该如何为客户做这件事呢?
我在这里浏览了以下几页:
1)这个家伙为两个独立的客户端分离了TCP和UDP:一个服务器中的Java TCP和UDP echo
2)线程可以让两个应用程序侦听同一个端口吗?建议我不能对同一个客户端同时对同一个端口号同时使用TCP和UDP。
3)……本页:在同一端口上监听TCP和UDP请求。但是,它并没有建议如何实现客户端。另外,他有一个线程,而不是一个客户端(奇怪的)从服务器接收数据包并将其发送到服务器。
我一直在网上游荡(特别是谷歌),但没有任何东西。我认为,如果有的话,很少有人处理过这一问题。
因此,我的问题是:如何在客户端中融合TCP和UDP功能?我希望服务器能够通过TCP和UDP套接字与客户端连接,并在客户端之间使用TCP。我不知道下一步该怎么办。
感谢任何帮助。提前道谢。
String hostName = args[0];
int portNumber = Integer.parseInt(args[1]);
MulticastSocket udpSocket = new MulticastSocket(4446);
InetAddress address = InetAddress.getByName("230.0.0.1");
udpSocket.joinGroup(address);
DatagramPacket packet;
// UDP: get a few quotes
for (int i = 0; i < 5; i++) {
byte[] buf = new byte[256];
packet = new DatagramPacket(buf, buf.length);
udpSocket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println("Quote of the Moment: " + received);
}
udpSocket.leaveGroup(address);
udpSocket.close();
// TCP
try (
Socket tcpSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(tcpSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(tcpSocket.getInputStream()));
) {
BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;
// AS LONG AS server and client are interacting:
while ((fromServer = in.readLine()) != null) {
System.out.println(fromServer);
if (fromServer.equals("Bye."))
break;
fromUser = stdIn.readLine();
if (fromUser != null) {
//System.out.println(fromUser);
out.println(fromUser);
}
}
} catch (UnknownHostException e) {
System.err.println("Unknown host: " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("Unable to find I/O for connection to " +
hostName);
System.exit(1);
}
在这种情况下,客户端在UDP连接中正确接收数据报,然后按照预期切换到TCP功能。但有两个问题:
1)一旦输入了正确的输入(在“exit”命令中硬编码),服务器就无法退出监听循环。
2)服务器和客户端在切换到TCP之前只保持一次UDP连接。
我很难找到一个真正的问题,但是:
2)线程可以让两个应用程序侦听同一个端口吗?建议我不能对同一个客户端同时对同一个端口号同时使用TCP和UDP。
上面没写任何这样的东西。它规定不能将两个TCP套接字绑定到同一端口。无论如何,事实是你可以。
所以我们要...
3)...本页:侦听同一端口上的TCP和UDP请求。
有一个反例证明了这一点。
但是,它并没有就如何实现客户端提出任何建议。
比如?您只需要创建一个TCP或UDP套接字,并且要么将TCP套接字连接到远程ip:端口,要么只使用UDP套接字发送到那个ip:端口。我看不出这里有什么问题。
只需为TCP创建一个新的ServerSocket(port)
和为UDP创建一个新的DatagramSocket(port)
并让一个线程侦听每一个。TCP线程应循环调用Accept()
并为每个接受的套接字生成一个新线程;
UDP线程只能循环DataGramSocket.Receive()。
Coroutine\Client提供了TCP、UDP、unixSocket传输协议的Socket客户端封装代码,使用时仅需new Swoole\Coroutine\Client即可。 实现原理 Coroutine\Client的所有涉及网络请求的方法,Swoole都会进行协程调度,业务层无需感知 使用方法和Client同步模式方法完全一致 connect超时设置同时作用于Connect和Recv、
同样,如果客户机已经创建了一个IPv6套接字(因为getaddrinfo()说它是有效的),然后调用getaddrinfo()来查找服务器的地址,那么如果它只得到一个IPv4结果呢?我知道我可以告诉getaddrinfo()只给出IPv6结果,但是如果服务器没有IPv6地址怎么办?UDP客户端是否应该关闭并重新创建其套接字以匹配服务器地址格式?还是保证我能得到我要求的地址格式? (我欢迎任何能回答
所谓客户端混合,指的是 Vue 在浏览器端接管由服务端发送的静态 HTML,使其变为由 Vue 管理的动态 DOM 的过程。 在entry-client.js中,我们用下面这行挂载 (mount) 应用程序: // 这里假定 App.vue template 根元素的 `id="app"` app.$mount('#app') 由于服务器已经渲染好了 HTML,我们显然无需将其丢弃再重新创建所
本文向大家介绍Android编程实现TCP、UDP客户端通信功能示例,包括了Android编程实现TCP、UDP客户端通信功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程实现TCP、UDP客户端通信功能。分享给大家供大家参考,具体如下: 在进行Android开发的过程中,免不了,要开发TCP/UDP通讯的程序,下面这两段代码,分别介绍了TCP/UCP通过的一个实例
udp 客户端 udp 客户端 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * *//* * 程序清单:udp 客户端 * * 这是一个 udp 客户端的例程 * 导出 u
我正在为一个大学项目创建一个游戏服务器,所以我不使用任何库/框架。 经过大量研究后,我希望客户端和服务器使用UDP协议进行大量通信,例如角色移动和计时器,因为这方面的可靠性并不重要,丢失的数据包可以得到补偿。 但是,我还想将TCP协议用于游戏的其他方面,例如操作和事件,在这些方面,信息到达客户端是至关重要的。 我的问题是,我对使用UDP不太了解,在Java,从我的理解来看,它完全不同于仅仅为TCP