从Console中读取内容:
BufferedReader inputReader; // Alt + Shift + z try...catch等快捷键 // 从Console读取内容 try { inputReader = new BufferedReader(new InputStreamReader(System.in)); String inputContent; while (!(inputContent = inputReader.readLine()).equals("bye")) { System.out.println(inputContent); } } catch (Exception e) { e.printStackTrace(); }
一.单向通信
Client -> Server
SocketClient.java
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class SocketClient { public static void main(String[] args) { SocketClient client = new SocketClient(); client.start(); } public void start() { BufferedReader inputReader = null; BufferedWriter writer = null; Socket socket = null; // 从Console读取内容 try { socket = new Socket("127.0.0.1", 9898); // 从socket进行写入 writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); inputReader = new BufferedReader(new InputStreamReader(System.in)); String inputContent; while (!(inputContent = inputReader.readLine()).equals("bye")) { writer.write(inputContent + "\n"); writer.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { writer.close(); inputReader.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
SocketServer.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static void main(String[] args) { SocketServer socketServer = new SocketServer(); socketServer.startServer(); } public void startServer() { ServerSocket serverSocket = null; BufferedReader reader = null; Socket socket = null; try { // 端口号只要不冲突就行 serverSocket = new ServerSocket(9898); System.out.println("server started.."); // 进入阻塞状态,等待客户端接入 socket = serverSocket.accept(); System.out.println("client " + socket.hashCode() + " connected"); // 从socket中读取数据 reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String receiveMsg; while ((receiveMsg = reader.readLine()) != null) { // 以"\n"结束 System.out.println(receiveMsg); } } catch (Exception e) { e.printStackTrace(); } finally { try { reader.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
二.Client Server双向通信
即时接受消息,也就是所谓的长连接,记得要先启动Server。
SocketClient2.java
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class SocketClient2 { public static void main(String[] args) { SocketClient2 client = new SocketClient2(); client.start(); } public void start() { BufferedReader inputReader = null; // 从socket读取 BufferedReader reader = null; BufferedWriter writer = null; Socket socket = null; // Alt + Shift + z try...catch等快捷键 // 从Console读取内容 try { socket = new Socket("127.0.0.1", 9898); // 用于读取服务器返回的数据 reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 从socket进行写入 writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); inputReader = new BufferedReader(new InputStreamReader(System.in)); String inputContent; while (!(inputContent = inputReader.readLine()).equals("bye")) { writer.write(inputContent + "\n"); writer.flush(); // System.out.println(inputContent); // 服务器返回的数据 String response = reader.readLine(); System.out.println(response); } } catch (Exception e) { e.printStackTrace(); } finally { try { reader.close(); writer.close(); inputReader.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
SocketServer2.java
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServer2 { public static void main(String[] args) { SocketServer2 socketServer = new SocketServer2(); socketServer.startServer(); } public void startServer() { ServerSocket serverSocket = null; BufferedReader reader = null; BufferedWriter writer = null; Socket socket = null; try { // 端口号只要不冲突就行 serverSocket = new ServerSocket(9898); System.out.println("server started.."); // 进入阻塞状态,等待客户端接入 socket = serverSocket.accept(); System.out.println("client " + socket.hashCode() + " connected"); // 从socket中读取数据 reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String receiveMsg; while ((receiveMsg = reader.readLine()) != null) { // 以"\n"结束 System.out.println(receiveMsg); writer.write("server reply:" + receiveMsg + "\n"); writer.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { reader.close(); writer.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
三.Socket模拟http请求响应(仅模拟)
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; import java.util.Random; public class SimpleServer { private ServerSocket ss; private Socket socket; private BufferedReader in; private PrintWriter out; private Random random = new Random(); public SimpleServer() { try { this.ss = new ServerSocket(9898); System.out.println("The server is waiting your input..."); for (;;) { this.socket = this.ss.accept(); this.in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); this.out = new PrintWriter(this.socket.getOutputStream(), true); String line = this.in.readLine(); System.out.println("you input is : " + line); String echo = randomEcho(); System.out.println("echo : " + echo); StringBuilder sb = new StringBuilder(); sb.append("HTTP/1.1 200 OK").append("\n") .append("Content-Type:application/x-www-form-urlencoded;charset=UTF-8").append("\n") .append("Date:").append(new Date().toString()).append("\n").append("Content-Length:") .append(echo.getBytes().length).append("\n").append("\n").append(echo); this.out.println(sb.toString()); this.out.flush(); this.out.close(); this.in.close(); this.socket.close(); if (line.equalsIgnoreCase("quit") || line.equalsIgnoreCase("exit") || line.equalsIgnoreCase("bye")) { break; } } this.ss.close(); } catch (Exception e) { e.printStackTrace(); } } private String randomEcho() throws Exception { int num = this.random.nextInt(); StringBuilder sb = new StringBuilder(); sb.append("respCode=").append("0000").append("&").append("respMsg=").append("随机消息:" + num); // String signature = SignUtil.sign(ResourcesUtils.getInstance().tppPriKey().trim().getBytes("UTF-8"), sb.toString()); // sb.append("&").append("signature=").append(signature); return sb.toString(); } public static void main(String[] args) { new SimpleServer(); } }
参考文章:http://blog.csdn.net/DuanLiuchang/article/details/70148894?locationNum=13&fps=1
相关推荐
该文件step by step的介绍了如何通过Simulink将配置AUTOSAR中Client Server通信。可以用于对Simulink 向 AUTOSAR规范的迁移指导
Linux下Client_Server异步通信的研究及实现.pdf
一,实验内容:基于服务器的客户端相互直接通信 ...3,C与C之间直接通信(不是通过S传递)。 4,C与C之间直接通信既可以使用TCP,也可以使用UDP。 5,可以使用Socket,也可以使用TcpClient/UdpClient等;
Client/Server通信(NamedPipe实现),C++实现,可以直接运行。
C++ epoll方式 client与server stocket连接通信例子, 供大家学习参考
tcp通信,client和server通信,建立连接后聊天传文件等
服务器客户端通信程序,socket编程。
利用bluetoothgatt 实现client和server端两个平台之间的数据通信
使用AIDL实现Service与Client绑定后的双向调用,Client在绑定Service时传入自己的Binder ,Service使用这个Binder实现调用Client的方法
MFC 网络通信demo server和client
Qt下简单的客户端服务器端通信
python 一个 server端 可以与多个client端通信 代码
android messager通信client和server
android TCP server 和TCP client通信源码 手机成功与串口WIFI模块ST-MW-08S通信。
TCP工程可以在VS2010编译通过,亲测是可以使用的。机器环境是windows10 x64。不清楚的可以参考:https://blog.csdn.net/armwind/article/details/87564919
一个client/server 演示程序代码
用消息队列实现Client和Server间的通信
用于树莓派的socket通信,server端和client端的用于传输文件的程序
主要是server和多个client进行交流通信,实现最基本的功能,如果想做更复杂的,可以在这个框架之上改动
client和server简单程序,简答实现客户端输入和服务器输出