java socket同步_Java socket客户端与服务端同步通信实例
工作中没涉及有关JAVA SOCKET编程的实际经历,但理论大概了解。想正明一下自已的对JAVA SOCKET理解写个通信TEST,通过TEST验证了基本与理论相近。下面是TEST SRC CODE 如果有牛人指点一二在下谢谢了,想写个类似QQ的局网通信程序,可没有太多时间如果您有JAVA SRC CODE 请与我联系。
1.开发工具:eclips3.2
2.工程基本结构:
2.1 工程名:SocketTest
2.2 包test1.service含类功能说明:
2.2.1 KKMultiServerThread 服务端多线程处理类.
2.2.2 KnockKnockProtocol 双方通信协义处理类。
2.2.3 KnockKnockProtocolFace 双方通信协义处理接口。
2.2.4 MyService 服务端监听处理主方法类。
2.2.5 MyClient 客户端主方法类。
2.3 包test1.error含类功能说明:
2.3.1 ResponseError 服务端处理客户端响应异常类。
3.工程基本结构具体说明及原码。
2.1 工程名:SocketTest
2.2 包test1.service含类功能说明:
2.2.1 KKMultiServerThread 服务端多线程处理类.
package test1.service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import test1.error.ResponseError;
/**
* @作者:刘家鸽
* @功能:服务端处理客户端请求返回响应(多线程)
*/
public class KKMultiServerThread extends Thread {
private Socket clentSocket = null;
private KnockKnockProtocol kkpf = null;
private PrintWriter pw = null;
private BufferedReader bir = null;
public KKMultiServerThread() {
super("KKMultiServerThread");
}
public KKMultiServerThread(Socket clentSocket) {
super("KKMultiServerThread");
this.clentSocket = clentSocket;
}
public KKMultiServerThread(Socket clentSocket, KnockKnockProtocolFace kkpf) {
super("KKMultiServerThread");
this.clentSocket = clentSocket;
this.kkpf = (KnockKnockProtocol) kkpf;
}
public Socket getClentSocket() {
return clentSocket;
}
public void setClentSocket(Socket clentSocket) {
this.clentSocket = clentSocket;
}
public KnockKnockProtocol getKkpf() {
return kkpf;
}
public void setKkpf(KnockKnockProtocol kkpf) {
this.kkpf = kkpf;
}
// 运行线程
public void run() {
try {
pw = new PrintWriter(clentSocket.getOutputStream());
bir = new BufferedReader(new InputStreamReader(clentSocket
.getInputStream()));
String request = bir.readLine();
System.out.println("客户端请求: " + request);
InetAddress ia = clentSocket.getInetAddress();
System.out.println("客户端ip:"+ia.getHostAddress());
String response = kkpf.processInput(request);
// 向客户端发送
System.out.println("返回客户端响应:" + response);
kkpf.sendResponse(pw, response);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ResponseError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
System.out.println("关闭客户与服务端的连接");
this.pw.close();
this.bir.close();
this.clentSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
2.2.2 KnockKnockProtocol 双方通信协义处理类。
package test1.service;
import java.io.PrintWriter;
import test1.error.ResponseError;
/**
* @作者:刘家鸽
* @功能:协义处理类
*/
public class KnockKnockProtocol implements KnockKnockProtocolFace {
private String response = null;
//获得客户端协义
public String processInput(String request) throws ResponseError {
if (request.equalsIgnoreCase(KnockKnockProtocolFace.QUERY_USER)) {
response = this.processQUERY_USER(request);
} else {
response = KnockKnockProtocolFace.NOT_EXIST_REQUEST_PROTOCOL_ERROR;
}
return this.response;
}
//处理QUERY_USER协义
public String processQUERY_USER(String request) throws ResponseError {
this.response = this.QUERY_USER_SUCCEED_INFO;
return this.response;
}
// 发送服务端请求
public void sendResponse(PrintWriter pw, String response) throws ResponseError {
pw.println(response);
pw.flush();
}
}
2.2.3 KnockKnockProtocolFace 双方通信协义处理接口。
package test1.service;
import java.io.PrintWriter;
import test1.error.ResponseError;
/**
* @作者:刘家鸽
* @功能:协义处理类接口
*/
public interface KnockKnockProtocolFace { //此属性没有从数据库或属性文件中读取。
public static final String EXIT = "EXIT";
public static final String QUERY_USER = "QUERY_USER";
public static final String ERROR = "ERROR";
public static final String QUERY_USER_ERROR_INFO = "QUERY_USER_ERROR";
public static final String QUERY_USER_SUCCEED_INFO = "QUERY_USER_SUCCEED";
public static final String NOT_EXIST_REQUEST_PROTOCOL_ERROR = "NOT_EXIST_REQUEST_PROTOCOL_ERROR";
public String processInput(String request) throws ResponseError;
public String processQUERY_USER(String request) throws ResponseError;
public void sendResponse(PrintWriter pw,String response) throws ResponseError;
}
2.2.4 MyService 服务端监听处理主方法类。
package test1.service;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @作者:刘家鸽
* @功能:服务监听
*/
public class MyService {
private ServerSocket ss = null;
private KKMultiServerThread kkst = null;
private int PORT = 65534;
private long MILLIS = 0l;
private Socket s = null;
// 服务
public static void main(String[] args) {
new MyService().startMainService();
}
// 开启服务
private void startMainService() {
try {
// 设置服务端提供服端口
ss = new ServerSocket(this.PORT);
KnockKnockProtocol kkpl = new KnockKnockProtocol();
kkst = new KKMultiServerThread();
// /s = ss.accept();
int count = 0;
// 读取客户端信息
while (true) {
System.out.println("等待读取客户端信息");
//s = ss.accept();
KKMultiServerThread st = new KKMultiServerThread(ss.accept(),
new KnockKnockProtocol());
st.start();
st.sleep(0);
}
// 关闭客户端连接
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
System.out.println("服务端关闭客户端连接");
if (s != null)
s.close();
if (ss != null)
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.2.5 MyClient 客户端主方法类。
package test1.service;
import java.io.IOException;
import java.net.*;
import java.io.*;
/**
* @作者:刘家鸽
* @功能:客户监听
*/
public class MyClient {
private Socket s = null;
private BufferedReader br = null;
private BufferedReader brClent = null;
private PrintWriter pw = null;
// 客户端实实读取
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 0; i < args.length; i++) {
new MyClient().startClientService(args[i]);
}
}
// 开启客户端
private void startClientService(String command) {
try {
// for (int i = 0; i < 10; i++) {
s = new Socket(InetAddress.getLocalHost(), 65534);
System.out.println("建立与服务端的连接1" + s);
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
pw = new PrintWriter(s.getOutputStream());
// pw.println("QUERY_USER");
pw.println(command);
pw.flush();
// 如果得到服务端响应 新关闭与服务端的连接
boolean flag = true;
while (flag) {
if (br.ready()) {
System.out.println("res: " + br.readLine());
break;
}
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 关闭与服务端的连接
System.out.println("关闭与服务端的连接");
try {
if (br != null)
br.close();
if (pw != null)
pw.close();
if (s != null)
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2.3 包test1.error含类功能说明:
2.3.1 ResponseError 服务端处理客户端响应异常类。
package test1.error;
/**
* @作者:刘家鸽
* @功能:异常处理类
*/
public class ResponseError extends Exception {
public ResponseError(String msg) {
super(msg);
}
}
总结:
1.使用JAVA SOCKET 能够实现强健的网络程序。JAVA SOCKET 帮我们实现了许多网络通信底层技术。
2.以上代码并不作为实际应用,很多地方没有实现开闭原则,但是就测试程序而言足够。
java socket同步_Java socket客户端与服务端同步通信实例相关推荐
- java socket同步通信,javasocket客户端与服务端同步通信实例
javasocket客户端与服务端同步通信实例 工作中没涉及有关JA V A SOCKET编程的实际经历,但理论大概了解.想正明一下自已的对JA V A SOCKET理解写个通信TEST,通过TEST ...
- TCP:利用Socket编程技术实现客户端向服务端上传一个图片。
问题: 利用Socket编程技术实现客户端向服务端上传一个图片的程序. 客户端: import java.io.*; import java.net.Socket;public class clien ...
- QT中使用C++ socket通信(了解socket通信、socket的三次握手和四次挥手、socket函数说明、客户端与服务端的代码实例)
一.TCP/IP协议四个抽象层: 二.socket位置 socket就在应用程序的传输层和应用层之间,传输层的底一层的服务提供给socket抽象层,socket抽象层再提供给应用层. 三.socket ...
- java基础—网络编程——TCP客户端与服务端交互
import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import ja ...
- flask和socket结合使用实现客户端向服务端发送文件
文章目录 1.实验效果 2.文件结构说明 3.操作步骤 4.代码下载 5.服务端文件 6.客户端文件 7.前端文件 1.实验效果 成功发送文件和接收文件 2.文件结构说明 3.操作步骤 (1)首先运行 ...
- gPRC简介以及Java中使用gPRC实现客户端与服务端通信(附代码下载)
场景 ProtoBuf的介绍以及在Java中使用protobuf将对象进行序列化与反序列化: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...
- Socket测试工具(客户端、服务端)
Socket是什么? SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信.最早出现在UNIX系统中,是UNIX系统主要的信息传递方式.在WINDOWS系统中,SOCKET称为WINSOC ...
- java webservice 服务器_java如何写webservice服务端
展开全部 Java 中的 Web Service 分为基于 SOAP 的和基于 REST 的两种,下面简单说一个基于 SOAP 的例子.要使用 JDK6u4 之后e69da5e6ba903231313 ...
- JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息
客户端代码: package com.lcx.socket;import java.io.BufferedReader; import java.io.BufferedWriter; import j ...
最新文章
- [Head First设计模式]身边的设计模式——适配器模式
- 小程序菜单栏吸顶效果
- 服务降级和服务熔断的区别_Spring Cloud 熔断 隔离 服务降级
- k8s 基础概念和术语
- 【月薪三万】听说深圳老师工资全国最高!!!比德国还高
- java 类型 转换 valueOf和parse...
- Java设计模式学习02——工厂模式
- 第一个Vert.x程序
- 虚拟服务器的外部跟内部端口,虚拟服务器设置 外部端口
- 计算机钢琴键盘,Everyone Piano
- 激光SLAM框架总结
- Excel绘制折线图_基础整理
- 【逆向】【Part 3】DLL注入
- 新概念二册 Lesson 13 The Greenwood Boys绿林少年 (将来进行时)
- 第1130期AI100_机器学习日报(2017-10-22)
- kafka connector使用(Docker一键启动版)
- 如何使用最简单的方式进行企业内部知识共享
- pynq 环境搭建_PYNQ系列学习(一): Pynq开发环境配置
- How to deal with Imbalanced Datasets in PyTorch - Weighted Random Sampler Tutorial
- 论文中稿 IEEE ACCESS 期刊
热门文章
- 磁盘这列(Raid)
- linux系统发育树的构建步骤,megacc构建进化树.mao文件生成方法
- 【花雕体验】02 行空板简单使用
- 中国首个中小学人工智能教材出版,在上海、山东发布
- PAT乙级 1044 火星数字 (20分)
- 根据前台设计数据库--首页篇
- 【案例教程】无人机生态环境监测、图像处理与GIS数据分析综合实践
- 商品库存管理系统网站php模板,进销存产品库存管理系统 v2.22源码
- UE4 – Ultimate FPS Weapons Pack VR ready 高品质武器模型和纹理
- 如何在WPS中启用WebDAV连接到穿越派·派盘