Tag: tcp

通过TCP发送音频流,UnsupportedAudioFileException

我成功地通过TCP套接字发送和读取文本和图像数据。 但我无法发送和读取音频流数据。 服务器上的示例代码: public class ServerAudio { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { ServerSocket serverSocker = new ServerSocket(); Socket client = null; serverSocker.bind(new InetSocketAddress(6666)); if (serverSocker.isBound()) { client = serverSocker.accept(); OutputStream out = client.getOutputStream(); while (true) { AudioInputStream ain = testPlay(“C:/Users/Public/Music/Sample Music/adios.wav”); if […]

什么时候抛出“java.io.IOException:Connection reset by peer”?

ERROR GServerHandler – java.io.IOException: Connection reset by peer java.io.IOException: Connection reset by peer at sun.nio.ch.FileDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(Unknown Source) at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) at sun.nio.ch.IOUtil.read(Unknown Source) at sun.nio.ch.SocketChannelImpl.read(Unknown Source) at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:323) at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282) at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 此日志来自使用netty实现的游戏服务器。 什么可以导致这个例外?

无法连接到Openfire服务器(使用smack api)

我试图使用smack 4.1.0运行此代码 Thread D= new Thread(new Runnable() { @Override public void run() { SmackConfiguration.setDefaultPacketReplyTimeout(10000); XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setUsernameAndPassword(“harsh”, “pass”) .setServiceName(“192.168.0.200”) .setHost(“192.168.0.200”) .setPort(5223).setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible) .build(); AbstractXMPPConnection conn2 = new XMPPTCPConnection(config); try { conn2.connect(); conn2.login(); Presence presence = new Presence(Presence.Type.unavailable); presence.setStatus(“Gone fishing”); // Send the packet (assume we have an XMPPConnection instance called “con”). conn2.sendStanza(presence); } catch […]

检查Java TCP服务器上的客户端断开连接 – 仅输出

我有一个Java TCP服务器,当客户端连接到它时,每30秒向客户端输出一条消息。 严格要求客户端不向服务器发送任何消息,并且服务器不向客户端发送除30秒间隔消息之外的任何数据。 当我断开客户端连接时,服务器将在下次尝试写入客户端时才会意识到这一点。 因此,服务器最多可能需要30秒才能识别断开连接。 我想要做的是每隔几秒检查断开连接而不必等待,但我不知道如何做到这一点,因为a)服务器没有从客户端接收和b)服务器无法发送任何其他数据。 请有人能够对此有所了解吗? 谢谢。

用java流音乐

我目前正在编写一些聊天程序,现在想通过客户端命令播放音乐,如: /music http://somewebsite.com/somesong.mp3 因此,链接将从发送歌曲的客户端发送到服务器。 然后服务器应该不下载歌曲,将其流式传输到每个客户端(他们也不应该下载它)。 问题是,我不知道如何通过基于TCP的连接流式传输mp3。 我的问题是,如果有人能够提供我需要的库/教程/想法/代码示例。 作为替代方案,从一个客户端的计算机直接流式传输音乐也是可以的。 如果我(作为客户端)在我的机器上播放歌曲(使用某些音乐播放器,如VLC或类似),然后输入某个命令(可能/流 ),声卡中的声音将流式传输到服务器,然后传输到每个客户登录。 如果你能为我提供一些建议,那将是非常棒的,谷歌到目前为止并没有真正帮助,主要是因为我不太明白我应该搜索什么。 提前致谢!

Netty客户端到服务器消息

这实际上是我在这里的第一篇文章,我一直试图弄清楚这一段时间,但我终于打电话给旗帜并试图在这个主题上得到一些帮助。 所以我有一个客户端和一个服务器,它是在echo客户端/服务器和安全聊天客户端/服务器之后建模的。 我对聊天的SSL部分并不感兴趣,只是为了确保我收到客户端/服务器的响应。 我将在本文的底部添加所有相关代码。 我目前遇到的问题是,我可以在客户端连接时从服务器向客户端发送消息,但是在服务器向客户端发送初始消息时,我无法从客户端向服务器发送消息。 从服务器发送的消息是: Welcome to the server! 来自客户端的消息是 test 我应该知道我从客户端收到了消息,因为它应该回显 [You] test 我知道服务器看到客户端,它给我状态更新但我不能出于某种原因向服务器发送消息。 现在提出一个问题……有一次我正在使用StringDecoder和StringEncoder作为解码器和编码器…如果你正在制作一个游戏(这就是我正在做的事情)你会有类似的东西登录,玩家动作,世界更新等……发送Strings是最好的方法吗? 我知道我看到很多字节流,在我的编程课中,我经历过触摸操作字节流,但我仍然不是很满意它们。 如果字节流是更好/最好的方法,那么有人可以详细解释如何操作字节流以处理不同的项目。 如前所述,这是客户端中所有内容的开始: public class Client { public Client() { // Initialize the window GameWindow.init(); // Initialize the server connection ClientHandler.init(); } public static void main(String[] args) throws Exception { // Set a default server address if one […]

连接丢失后恢复文件上传/下载(套接字编程)

我正在编写一个程序,使用套接字编程在客户端和服务器之间下载/上传文件。 我写的代码到目前为止,我可以成功地传输文件。 但是,如果在发生下载/上传时由于网络/客户端/服务器中的问题导致连接失败..我需要从原始点恢复下载/上传(不希望重新发送最初发送的数据)。 我不知道该怎么做。 我正在将文件读入字节数组并通过网络发送。 我最初的想法是,每次我下载..我应检查文件是否已存在并将数据读入字节数组 – >将数据发送到服务器进行比较,然后通过服务器文件返回剩余数据比较两个字节数组。 但这似乎效率低下并且不再重新开始下载(因为我再次发送数据)。 注意:文件名是唯一标识符。 如果有人能就我应该如何实现文件恢复function给我建议,我真的很感激? Server side code: package servers; import java.io.*; import java.net.*; import java.util.Arrays; public class tcpserver1 extends Thread { public static void main(String args[]) throws Exception { ServerSocket welcomeSocket = null; try { welcomeSocket = new ServerSocket(5555); while(true) { Socket socketConnection = welcomeSocket.accept(); System.out.println(“Server passing off […]

如何在java中实现TCP服务器和TCP客户端来传输文件

我已经实现了简单的TCP服务器和TCP客户端类,可以将消息从客户端发送到服务器,消息将在服务器端转换为大写,但是如何实现从服务器到客户端的传输文件以及从客户端上传文件到服务器。 以下代码是我所拥有的。 TCPClient.java : import java.io.*; import java.net.*; class TCPClient { public static void main(String args[]) throws Exception { String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket(“127.0.0.1”, 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + “\n”); modifiedSentence = inFromServer.readLine(); […]

如何以正确的方式关闭sockets?

这是一个简单的TCP服务器。 程序终止后如何关闭套接字? 我使用try / finally并尝试关闭套接字。 但是当我退出程序时它不会运行finally块。 任何人都可以知道如何以正确的方式关闭sockets? try { socket = new ServerSocket(port); System.out.println(“Server is starting on port ” + port + ” …”); }catch (IOException e){ System.out.println(“Error on socket creation!”); } Socket connectionSocket = null; try{ while(true){ try{ connectionSocket = socket.accept(); Thread t = new Thread(new ClientConnection(connectionSocket)); t.start(); }catch (IOException e) { System.out.println(“Error on […]

Java – 通过Java套接字广播语音

我创建了一个从客户端接收声音的服务器应用程序,然后我广播这个存储为字节的声音并将字节发送回连接到服务器的客户端。 现在我只使用一个客户端进行测试,客户端正在接收语音,但声音一直都是口吃。 有人可以告诉我我做错了什么吗? 我想我理解为什么声音播放不顺畅但不明白如何解决问题。 代码是吼叫。 客户端: 将语音发送到服务器的部分 public void captureAudio() { Runnable runnable = new Runnable(){ public void run() { first=true; try { final AudioFileFormat.Type fileType = AudioFileFormat.Type.AU; final AudioFormat format = getFormat(); DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); line = (TargetDataLine)AudioSystem.getLine(info); line.open(format); line.start(); int bufferSize = (int) format.getSampleRate()* format.getFrameSize(); byte buffer[] = new byte[bufferSize]; […]