服务器端读入流部分代码:
System.out.println(new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine());
客户端写入流部分代码
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(content);
writer.flush();
程序运行时出现阻塞
原因分析:
服务器端使用了readLine();也就是在读一行文本,读文件的时候不会出现问题,但是在使用Socket时,客户端写入了数据
但并没有提供换行符,所以服务器端在readLine()时一直处于阻塞状态,
解决方法:
一:
可以在客户端写完数据后加上换行符,
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(content);
writer.newLine();
writer.flush();
这样在服务器端就不会出现阻塞。
二:
使用DataOutputStream和DataInputStream
服务器端:
input.readUTF();
客户端
output.writeUTF();
分享到:
相关推荐
Java Socket即时通讯是一种基于TCP/...总之,Java Socket是构建网络即时通讯系统的重要工具,通过它,开发者可以创建定制化的、高效的数据传输解决方案。理解并熟练掌握Socket编程,对于开发复杂的分布式系统至关重要。
3. **数据传输**:连接建立后,通过Socket的输入流(InputStream)和输出流(OutputStream)进行数据交换。InputStream用于读取服务器发送的数据,OutputStream用于向服务器写入数据。 4. **关闭连接**:通讯完成后...
这个文件可能包含了通用的Socket操作工具方法,例如创建Socket对象,读写数据到Socket的输入/输出流,以及关闭Socket等。在Java中,`Socket`类提供了`getInputStream()`和`getOutputStream()`方法来获取与之相关的`...
在这种场景下,Socket编程是一种常见的解决方案。本文将深入探讨Android Socket源码实现与PC通讯的核心概念、步骤以及具体Java源码解析。 Socket,也被称为套接字,是网络编程中的基本组件,它提供了进程间通信...
3. 通过Socket对象的输入流和输出流,服务端可以读取客户端发送的数据,并向客户端发送数据。 客户端的实现则包括: 1. 创建Socket实例,指定服务器的IP地址和端口号,这将建立到服务器的连接。 2. 获取Socket的...
2. 获取输入流和输出流对象,然后就可以通过这些流进行数据传输。 ### 3. 数据传输 - **读取数据**:使用 `InputStream` 对象读取来自服务器的数据。可以使用 `read()` 或 `readBytes()` 方法。 - **写入数据**:...
- 常见解决方案包括检查服务器的输入输出流管理,确保所有数据都被读取,以及正确关闭Socket。 6. **HttpURLConnection使用**: - `HttpURLConnection`是Java标准库中的类,可方便地发送HTTP请求(GET、POST等)...
在提供的文件列表中,`SocketTest.sln`可能是一个Visual Studio解决方案文件,包含了项目设置和依赖关系。`.vs`目录是Visual Studio的工作区文件,包含了项目配置信息和个人设置。`SocketTest`可能是项目源代码...
3. **数据传输**:在连接建立后,双方可以通过Socket的输入流和输出流进行数据交换。发送数据通常使用`OutputStream.write()`方法,而接收数据则使用`InputStream.read()`方法。 4. **异常处理**:在网络编程中,...
解决方案通常包括确保在读写数据时都使用一致的字符编码,例如在写入输出流前使用`new String(byte[], "UTF-8")`转换字节为字符串,或者在读取输入流后使用`str.getBytes("UTF-8")`将字符串转换为字节。 服务类...
在Android中,文件传输通常涉及读写文件流和Socket的输入输出流的交互。可以使用FileInputStream和FileOutputStream读取和写入本地文件,然后将这些流包装到Socket的OutputStream和InputStream中,实现文件数据的...
3. 数据传输:连接建立后,可以使用Socket的输入输出流(InputStream和OutputStream)进行数据的发送和接收。注意,由于TCP是面向字节流的,所以需要自己处理数据的分包和组装。 4. 关闭连接:当通信完毕,应关闭...
首先,需要创建Socket对象,然后通过`getOutputStream()`获取输出流用于发送数据,通过`getInputStream()`获取输入流用于接收数据。 3. **PC服务器端**: 在PC上,通常使用Java的ServerSocket类监听特定端口,等待...
7. **解决方案结构**:`SocketDemo.sln`文件是Visual Studio的解决方案文件,其中包含了项目的所有信息。`SocketDemo`可能是项目的主程序文件,可能包含客户端和服务器端的逻辑代码。 8. **多线程**:为了处理并发...
一旦连接建立,就可以通过Socket的输入流和输出流进行数据交换。 二、在同一台PC上的两个模拟器通信 由于两个模拟器都运行在同一台PC上,它们可以通过本地环回地址(127.0.0.1)进行通信,这个地址代表了本机。因此...
TCP/IP协议族为此提供了解决方案,其中IP层负责主机定位,TCP层提供可靠的数据传输。 TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种主要的传输协议。TCP是面向连接的,确保数据的...
- 通过Socket对象的输入/输出流进行数据读写。 - 当完成通信后,关闭Socket和ServerSocket。 2. **客户端**: - 创建Socket,指定服务器的IP地址和端口号。 - 获取Socket的输入/输出流,用于与服务器进行数据...
**打开输入/输出流**:为Socket打开输入流和输出流,以便进行数据读取和发送。 3. **读写操作**:按照预定的协议对Socket进行读写操作,实现数据的交互。 4. **关闭Socket**:完成数据交换后,关闭Socket释放资源...
通常使用`Socket.getInputStream()`获取输入流,用`Socket.getOutputStream()`获取输出流。 - 对于数据的读写,通常采用`BufferedReader`和`PrintWriter`等流处理类,以提高效率并处理字符编码问题。 4. **单向...