随身携带,我是套接字编程的新手。
关于制作与Teamviewer类似的程序。我可以创建一个多线程的简单服务器/客户端应用程序。但问题是我无法弄清楚如何做以下事情: 让我们说我有服务器和客户端连接到服务器。 我可以将文件从客户端传输到服务器。我可以和客户进行简单的聊天。但我的问题是:如何在文件同时传输的同时与客户端聊天?我的意思是我不能在一段时间内创建多个函数。因为我们只有一个输入和一个输出服务器和客户端。那么我怎么能向客户端发送更多的那个功能呢?客户端怎么能一次读取多个功能并响应请求呢? 我做了类似的事情:我向客户端发送了一个请求,我在一个包含新DataInputStream的新线程中得到了响应,但我无法弄清楚主DataInputStream将如何从客户端接收新的响应,因为接收的是什么这种方式的请求是新的DataInputStream。我在这种情况下真的迷失了,因为我觉得我的概念是完全错误的,但我无法找到正确的概念去做那样的事情。 是否可以使用ServerSocket或者我应该看看NIO Socket?
注意: 我不想要一段代码,我想了解整个操作的概念。谢谢
答案 0 :(得分:1)
在单个连接上使用基于数据包的按摩系统
发送
{"type":"chat", "message":"hi"}
{"type":"xfer", "fileName":"fileX", "data":"some_binary_data"}
接收
switch(getString("type")){
case "chat":
System.out.println("User said" + getString("message"));
break;
case "xfer":
File f = new File(getString("fileName"));
f.write(getString("data"));
break;
...
}
显然,如果二进制文件相当大,你应该把它分成许多不同的消息并在另一边重新组装,这样就可以让聊天消息在传输过程中继续进行。< / p>