用输入输出流实现往服务器端发送消息并接收返回的消息。
客户端 StreamTest.java:
public class StreamTest implements Controller{
public ModelAndView handleRequest(HttpServletRequest req,
HttpServletResponse res) throws Exception {
URL url = new URL("http://localhost:8088/Test/streamtestserver.do
");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST"); // 设置请求方式
con.setRequestProperty("Content-Type", "application/stream"); // 设置请求类型
// con.setRequestProperty("Content-Length",Integer.toString(data.length()));
con.setDoOutput(true); //默认是false,将 doOutput 标志设置为 true,指示应用程序要将数据写入 URL 连接。
con.setDoInput(true); //默认是true,将 doInput 标志设置为 true,指示应用程序要从 URL 连接读取数据。
con.setUseCaches(false);//如果为 true,则只要有条件就允许协议使用缓存。如果为 false,则该协议始终必须获得此对象的新副本。
con.setInstanceFollowRedirects(true);
// con.connect();
System.out.println("StreamTest...................");
OutputStream o = con.getOutputStream();
DataOutputStream d = new DataOutputStream(o);
d.write("zy".getBytes());
// d.flush();
// d.close();
// con.disconnect();
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer sf = new StringBuffer();
String str;
while((str=bf.readLine())!=null)
{
sf.append(str);
}
bf.close();
d.close(); // ① 这里必须放在con.getInputStream()这句之后,否则会报socket错
con.disconnect();
System.out.println("StreamTestStr="+sf.toString());
return null;
}
}
服务器端 StreamTestServer.java
public class StreamTestServer implements Controller{
public ModelAndView handleRequest(HttpServletRequest req,
HttpServletResponse res) throws Exception {
BufferedReader bf = new BufferedReader(req.getReader());
StringBuffer sf = new StringBuffer();
String str;
while((str=bf.readLine())!=null)
{
sf.append(str);
}
bf.close();
System.out.println("StreamTestServer="+sf.toString());
if(sf.toString().equals("zy")){
res.getWriter().write("123456"); // (1)
}
return null;
}
}
输出结果为
StreamTest...................
StreamTestServer=zy
StreamTestStr=123456
Server端的(1)也可以改成 return new ModelAndView("test.jsp");
jsp中是要输出的内容,不过因为客户端读到的是源文件,所以要把jsp中无用的东西去掉,只写需要传回的信息
分享到:
相关推荐
2. **关闭资源**:完成通信后,记得关闭Socket及其相关的输入输出流,释放资源: ```java finally { try { if (socket != null) socket.close(); if (outputStream != null) outputStream.close(); if ...
- **OutputStream**:同Server端,客户端也通过`getOutputStream()`获取输出流,并使用`write()`方法发送数据。 7. **实现Socket Client端数据接收** - **InputStream**:客户端通过Socket的`getInputStream()`...
- 客户端同样使用Socket的`getInputStream()`和`getOutputStream()`方法来获取输入输出流,进行数据交互。 - 客户端可以使用输出流向服务器发送消息,然后通过输入流读取服务器的响应。 - 完成通信后,客户端也...
总之,Java的Socket API提供了基本的网络通信能力,通过结合输入输出流,我们可以实现文件的跨网络传输。这个示例展示了如何在服务器端创建一个接收连接并发送文件的服务器,以及如何在客户端建立连接并接收文件的...
这个程序可能包含一个客户端和一个服务器端,客户端连续发送多条消息,而服务器端则接收并处理这些消息。为了运行这个程序,你需要确保客户端和服务器端都在正确配置的网络环境中,且服务器端已经启动并监听指定的...
4. **发送响应**:使用HttpServletResponse对象的`getOutputStream()`或`getWriter()`方法,将JSON字符串写入输出流。例如,使用`printWriter.print(jsonString)`或`outputStream.write(jsonBytes)`。 5. **客户端...
- 通过输入流读取客户端发送的文件数据,输出流则用来向客户端发送数据。 2. **客户端实现**: - 创建`Socket`实例,指定服务器的IP地址和端口号,`Socket.connect()`方法尝试连接到服务器。 - 获取`Socket`的...
4. **建立连接**:连接到服务器的URL,创建输出流并写入文件数据。 5. **发送请求**:发送HTTP请求并等待服务器响应。 6. **处理响应**:接收服务器返回的状态码和响应数据,根据状态码判断文件是否成功上传。 **...
服务器端则是接收和处理来自客户端的请求,并向客户端返回响应的程序。在Java中,常常使用ServerSocket类来监听特定端口上的连接请求。一旦有客户端连接,服务器端就会创建一个Socket实例来与该客户端通信。`server5...
1. **ServerSocket类**:服务器端创建Socket连接的第一步是实例化ServerSocket对象,并指定一个端口号。例如,`new ServerSocket(23457)`。这个操作会打开指定的端口,开始监听连接请求。 2. **accept()方法**:...
运行服务器端的启动类,然后运行客户端的启动类,客户端将会发送一个自定义的消息到服务器,服务器接收到消息后,通过自定义的编解码器解析,然后返回相同格式的消息给客户端。客户端接收到消息后,同样通过自定义的...
一旦连接建立,它会创建一个`Socket`对象来处理这个特定的客户端,并通过其输入/输出流读取客户端发送的数据,同时发送响应。 6. **UDPTest.java**: - UDP(User Datagram Protocol)是一种无连接的、不可靠的...
本文将详细介绍如何实现Android客户端向服务器端发送消息的过程,并深入探讨其中涉及的关键技术点。 #### 一、理解服务器挂起概念 在进行客户端与服务器的数据通信时,“服务器挂起”是一个常见的问题。“服务器挂...
消息队列按照数据流动方向分为输入队列和输出队列,服务器和客户端结构相似。数据处理模块直接访问消息队列来获取和发送数据,队列的数量可根据业务处理类型和数据流量等因素灵活调整。 #### Socket接口 Socket...
为了能够与客户端进行数据交换,我们需要创建输入输出流。示例代码中使用了以下几种流: - **输入流**:用于从客户端读取数据。 - `BufferedReader in = new BufferedReader(new InputStreamReader(server....
3. 通过输出流向服务器发送消息,通过输入流接收服务器返回的消息。 4. 完成通信后,关闭`Socket`连接。 在Java聊天室中,为了实现多用户同时在线聊天,服务器需要管理一个客户端列表,每当有新的客户端连接时,将...
客户端将用户输入的文本转化为字节流并通过Socket发送,服务器端接收到字节流后解析成文本,再广播给其他客户端。 6. **Eclipse集成开发环境**: 提供的`ClientDemo.java`表明项目是在Eclipse IDE中开发的,...
6. **资源释放**:在完成数据交换后,记得关闭Socket以及相关的输入输出流,释放系统资源。 在实际的“SimpleServer”文件中,可能会包含一个服务器端主类,这个类负责初始化服务器、监听客户端连接、处理数据交换...
在Java中,我们可以使用`PrintWriter`或`BufferedReader`类来处理输入输出流,实现文本数据的读写。例如,服务器端可以创建一个`BufferedReader`来读取客户端的输入,而客户端可以使用`PrintWriter`向服务器发送消息...