`
wang_2011_ying
  • 浏览: 149974 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

socket通讯输入流输出流阻塞解决方案

 
阅读更多
[size=medium]服务器端读入流部分代码:

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()时一直处于阻塞状态,

解决方法:
一:
   可以在客户端写完数据后加上换行符,newLine()方法即可,代码如下:
  
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));            
   writer.write(content);
   writer.newLine();   
   writer.flush();

这样在服务器端就不会出现阻塞。

二:
  使用DataOutputStream和DataInputStream
  服务器端:
 
input.readUTF();

  客户端
 
output.writeUTF();
[/size]
分享到:
评论

相关推荐

    java Socket即时通讯

    Java Socket即时通讯是一种基于TCP/...总之,Java Socket是构建网络即时通讯系统的重要工具,通过它,开发者可以创建定制化的、高效的数据传输解决方案。理解并熟练掌握Socket编程,对于开发复杂的分布式系统至关重要。

    android socket 即时通讯开发

    3. **数据传输**:连接建立后,通过Socket的输入流(InputStream)和输出流(OutputStream)进行数据交换。InputStream用于读取服务器发送的数据,OutputStream用于向服务器写入数据。 4. **关闭连接**:通讯完成后...

    Java Socket学习---多线程阻塞

    这个文件可能包含了通用的Socket操作工具方法,例如创建Socket对象,读写数据到Socket的输入/输出流,以及关闭Socket等。在Java中,`Socket`类提供了`getInputStream()`和`getOutputStream()`方法来获取与之相关的`...

    Android Socket源码实现与PC通讯

    在这种场景下,Socket编程是一种常见的解决方案。本文将深入探讨Android Socket源码实现与PC通讯的核心概念、步骤以及具体Java源码解析。 Socket,也被称为套接字,是网络编程中的基本组件,它提供了进程间通信...

    完整的java socket聊天室

    3. 通过Socket对象的输入流和输出流,服务端可以读取客户端发送的数据,并向客户端发送数据。 客户端的实现则包括: 1. 创建Socket实例,指定服务器的IP地址和端口号,这将建立到服务器的连接。 2. 获取Socket的...

    j2me socket编程

    2. 获取输入流和输出流对象,然后就可以通过这些流进行数据传输。 ### 3. 数据传输 - **读取数据**:使用 `InputStream` 对象读取来自服务器的数据。可以使用 `read()` 或 `readBytes()` 方法。 - **写入数据**:...

    java socket 学习资料

    - 常见解决方案包括检查服务器的输入输出流管理,确保所有数据都被读取,以及正确关闭Socket。 6. **HttpURLConnection使用**: - `HttpURLConnection`是Java标准库中的类,可方便地发送HTTP请求(GET、POST等)...

    Socket网络编程

    在提供的文件列表中,`SocketTest.sln`可能是一个Visual Studio解决方案文件,包含了项目设置和依赖关系。`.vs`目录是Visual Studio的工作区文件,包含了项目配置信息和个人设置。`SocketTest`可能是项目源代码...

    安卓Android源码——Socket编程源码(与PC通讯).zip

    3. **数据传输**:在连接建立后,双方可以通过Socket的输入流和输出流进行数据交换。发送数据通常使用`OutputStream.write()`方法,而接收数据则使用`InputStream.read()`方法。 4. **异常处理**:在网络编程中,...

    java socket 客户端和服务端例子

    解决方案通常包括确保在读写数据时都使用一致的字符编码,例如在写入输出流前使用`new String(byte[], "UTF-8")`转换字节为字符串,或者在读取输入流后使用`str.getBytes("UTF-8")`将字符串转换为字节。 服务类...

    android Socket实现简单聊天功能以及文件传输

    在Android中,文件传输通常涉及读写文件流和Socket的输入输出流的交互。可以使用FileInputStream和FileOutputStream读取和写入本地文件,然后将这些流包装到Socket的OutputStream和InputStream中,实现文件数据的...

    安卓疯狂讲义里安卓基于socket的通信

    3. 数据传输:连接建立后,可以使用Socket的输入输出流(InputStream和OutputStream)进行数据的发送和接收。注意,由于TCP是面向字节流的,所以需要自己处理数据的分包和组装。 4. 关闭连接:当通信完毕,应关闭...

    Android应用源码安卓与PC的Socket通信项目java版

    首先,需要创建Socket对象,然后通过`getOutputStream()`获取输出流用于发送数据,通过`getInputStream()`获取输入流用于接收数据。 3. **PC服务器端**: 在PC上,通常使用Java的ServerSocket类监听特定端口,等待...

    老外用C# 写的一个通过socket的demo

    7. **解决方案结构**:`SocketDemo.sln`文件是Visual Studio的解决方案文件,其中包含了项目的所有信息。`SocketDemo`可能是项目的主程序文件,可能包含客户端和服务器端的逻辑代码。 8. **多线程**:为了处理并发...

    android socket编程源码—同一台PC的两个模拟器间的通信附详细文档

    一旦连接建立,就可以通过Socket的输入流和输出流进行数据交换。 二、在同一台PC上的两个模拟器通信 由于两个模拟器都运行在同一台PC上,它们可以通过本地环回地址(127.0.0.1)进行通信,这个地址代表了本机。因此...

    java_socket服务端和客户端编程

    TCP/IP协议族为此提供了解决方案,其中IP层负责主机定位,TCP层提供可靠的数据传输。 TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种主要的传输协议。TCP是面向连接的,确保数据的...

    TcpSocket

    - 通过Socket对象的输入/输出流进行数据读写。 - 当完成通信后,关闭Socket和ServerSocket。 2. **客户端**: - 创建Socket,指定服务器的IP地址和端口号。 - 获取Socket的输入/输出流,用于与服务器进行数据...

    java_socket服务端和客户端编程.doc

    **打开输入/输出流**:为Socket打开输入流和输出流,以便进行数据读取和发送。 3. **读写操作**:按照预定的协议对Socket进行读写操作,实现数据的交互。 4. **关闭Socket**:完成数据交换后,关闭Socket释放资源...

    Socket 网络编程

    通常使用`Socket.getInputStream()`获取输入流,用`Socket.getOutputStream()`获取输出流。 - 对于数据的读写,通常采用`BufferedReader`和`PrintWriter`等流处理类,以提高效率并处理字符编码问题。 4. **单向...

Global site tag (gtag.js) - Google Analytics