Java的Socket通信
来源:互联网 发布:淘宝上二手手机良心店 编辑:程序博客网 时间:2024/05/18 12:00
需求:服务器和客户端可以及时不间断通信
思路: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 语句
1 0
- java的socket通信
- Java的Socket通信
- java socket通信 1v1的通信
- JAVA的网络通信----SOCKET
- Java 的各种Socket通信
- Java简单的socket 通信
- JAVA SOCKET与TUXEDO通信的问题
- java基于UDP的socket通信
- java 和 Flex 之间的Socket通信
- 基于BIO的Java Socket通信
- 基于Java NIO的Socket通信
- android与pc的socket通信JAVA
- 一个java Socket通信的例子
- 一个简单的java socket通信程序
- Java实现简单的socket通信
- Java与C之间的socket通信
- Java Socket通信的简单例子
- Java 和 Python 的 Socket 通信
- Unix 环境高级编程——列出一个目录中的所有文件
- C++函数模板重载
- nginx自定义字符串
- oracle数据库中的锁简单的认识
- 法线
- Java的Socket通信
- 地图定位
- 自己总结的java.lang.ClassNotFoundException
- 【sas】WLS异方差检验以及修正
- C/C++内存泄漏及检测
- Android之如何解决android.os.NetworkOnMainThreadException的异常
- NSString
- 【Ajax 1】Ajax与传统Web开发的区别
- Java引用类型