Java的Socket通信
2015-11-14 19:28
387 查看
需求:服务器和客户端可以及时不间断通信
思路:1、服务器端:
1)建立ServerSocket和开启监听客户端连接
2)新建交流线程,在线程中不断循环读取客户端发送过来的数据。
2、客户端:
1)建立Socket和服务器连接通信
2)新建交流线程,在线程中不断循环读取客户端发送过来的数据。
这里做了简化:服务器端和客户端用的是同一种交流线程。
Server:
Client:
通信用的线程,while循环里不断的读
ExchangeThread:
运行效果:
首先启动Server
然后启动Client,这时socket已经接通了,Client处接受到来自server处sendMessage(server的main处)消息
然后Server接受到 Client发来的 is number 语句
思路:1、服务器端:
1)建立ServerSocket和开启监听客户端连接
2)新建交流线程,在线程中不断循环读取客户端发送过来的数据。
2、客户端:
1)建立Socket和服务器连接通信
2)新建交流线程,在线程中不断循环读取客户端发送过来的数据。
这里做了简化:服务器端和客户端用的是同一种交流线程。
Server:
import com.sun.xml.internal.ws.resources.SenderMessages; import java.awt.EventQueue; import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * 服务器端 */ public class Server { public static final int PORT = 12345;//监听的端口号 private static ExchangeThread serverExchangeThread; public static void main(String[] args) { try { Init(PORT); // 演示:连接成功后,直接调用线程里的send方法发送两条消息 serverExchangeThread.sendMessage("aaa"); serverExchangeThread.sendMessage("123"); } catch (Exception e) { e.printStackTrace(); } } public static void Init(int PORT){ try { ServerSocket ss = new ServerSocket(PORT); System.out.println("端口号"+PORT+",服务器已启动"); Socket s = ss.accept(); System.out.println("连接成功"); // 启动交流线程 serverExchangeThread=new ExchangeThread(s); } catch (IOException e) { e.printStackTrace(); } } public static ExchangeThread getExchangeThread(){ return serverExchangeThread; } }
Client:
import java.awt.EventQueue; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * 客户端 * Created by Fang */ public class Client { public static final int PORT = 12345;//监听的端口号 private static ExchangeThread clientExchangeThread; public static void main(String[] args) { try { Init(PORT); } catch (Exception e) { e.printStackTrace(); } } public static void Init(int PORT){ try { Socket socket = new Socket("localhost",PORT); System.out.println("客户端IP:"+socket.getLocalAddress()+"端口"+socket.getPort()); // 启动交流线程 clientExchangeThread=new ExchangeThread(socket); } catch (IOException e) { e.printStackTrace(); } } public static ExchangeThread getExchangeThread(){ return clientExchangeThread; } }
通信用的线程,while循环里不断的读
ExchangeThread:
import java.io.*; import java.net.Socket; /** * 进程通信线程 */ public class ExchangeThread implements Runnable { private Socket socket; BufferedReader bufferedReader; BufferedWriter bufferedWriter; public static boolean isNum(String str){ return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$"); } public ExchangeThread(Socket socket) { this.socket = socket; try { bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); }catch (Exception e){ e.printStackTrace(); } new Thread(this).start(); } public void run() { try { while(true) { // 这里负责读 String mess = bufferedReader.readLine(); System.out.println(mess); // 接收到对方发来的消息,就可以进行相应操作了 // 这里假设:如果接收到的消息为数组,那么就发送一个 is number回去 if(isNum(mess)) { sendMessage("is number"); } } } catch (Exception e) { System.out.println("服务器 run 异常: " + e.getMessage()); } finally { if (socket != null) { try { socket.close(); } catch (Exception e) { socket = null; System.out.println("服务端 finally 异常:" + e.getMessage()); } } } } public void sendMessage(String str){ // 这里负责写 try { bufferedWriter.write(str); bufferedWriter.newLine(); bufferedWriter.flush(); } catch (IOException e) { e.printStackTrace(); } } }
运行效果:
首先启动Server
然后启动Client,这时socket已经接通了,Client处接受到来自server处sendMessage(server的main处)消息
然后Server接受到 Client发来的 is number 语句
相关文章推荐
- Java基础之List集合原理(一)
- 搭建maven+spring+freemaker+mybatis环境之二
- Java MD5加密算法的实现
- javaWeb之JavaBean总结
- Java基础学习笔记
- 字符串之逆序(java实现)
- 字符串之字符串平移(java实现)
- Java中的wait和notify总结和应用
- spring aop的一些问题和bean组件问题
- java调度器(重试机制)实现
- List接口问题和java里TreeSet的add问题
- java构造函数和静态变量的执行顺序
- 搭建maven+spring+freemaker+mybatis环境之一
- spark java.lang.OutOfMemoryError: Java heap space
- Java HMACShA256
- 谈谈spring中bean的名字
- Interceptor详解
- MysqlProtocolAnalyzer一个Java实现的MySql协议解析库
- Java JUC之Atomic系列12大类实例讲解和原理分解
- Java基础<七>-------抽象、继承、接口