java socket通信的简要举例
Java的原生Socket(java.net.Socket)通信的举例:
首先是创建Socket的服务端;其次创建Socket的客户端。
通信过程如下:
客户端(C)向服务端(S)发送任意数据,服务端接受到来自客户端的数据并展示,同时激发服务端向客户端不停的发送随机数据;客户端接受来自服务端的数据并展示。
说明:通信过程如上。下面看代码如何实现:
服务端:
/**
* XXXX软件有限公司
* socket:socket.Server.java
* 日期:2015年12月4日
*/
package socket;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
/**
* Socket通信的服务端
*
* @author 王俊伟 wjw.happy.love@163.com
* @date 2015年12月4日 上午10:01:11
*/
public class Server {
public static final int PORT = 4444;// 监听的端口号 9666 4444
public static void main(String[] args) {
Server server = new Server();
server.init();
}
private void init() {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(PORT);
//System.out.println(serverSocket.getInetAddress());
while (true) {
Socket client = serverSocket.accept();
// 一个客户端连接就开户两个线程处理读写
new Thread(new ReadHandlerThread(client)).start();
new Thread(new WriteHandlerThread(client)).start();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (serverSocket != null) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
*
* 读客户端数据
*
* @author 王俊伟 wjw.happy.love@163.com
* @date 2016年7月21日 下午5:13:49
*/
class ReadHandlerThread implements Runnable {
private Socket client;
public ReadHandlerThread(Socket client) {
this.client = client;
}
@Override
public void run() {
BufferedReader br = null;
try {
while (true) {
// 读取客户端数据
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String reciver = br.readLine();
System.out.println("客户端发过来的内容:" + reciver);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
if (client != null) {
client = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 处理写操作的线程
*/
class WriteHandlerThread implements Runnable {
private Socket client;
public WriteHandlerThread(Socket client) {
this.client = client;
}
@Override
public void run() {
DataOutputStream dos = null;
BufferedReader br = null;
try {
while (true) {
// 向客户端回复信息
dos = new DataOutputStream(client.getOutputStream());
//System.out.print("请输入:\t");
// 键盘录入
//br = new BufferedReader(new InputStreamReader(System.in));
String data = "TTLK" + new Random().nextInt(100);
System.out.println("发给客户端数据:"+data);
StringReader in = new StringReader(data);
br = new BufferedReader(in);
String send = br.readLine();
// 发送数据
dos.writeBytes(send+"\n"); //必须写入换行符
Thread.sleep(3000);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (dos != null) {
dos.close();
}
if (br != null) {
br.close();
}
if (client != null) {
client = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* XXXX软件有限公司
* socket:socket.Client.java
* 日期:2015年12月4日
*/
package socket;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* Socket通信的客户端
*
* @author 王俊伟 wjw.happy.love@163.com
* @date 2015年12月4日 下午1:04:42
*/
public class Client {
public static final String IP = "127.0.0.1";//服务器地址 127.0.0.1 192.168.100.5 10.50.200.120
public static final int PORT = 4444;//服务器端口号 4444 9666
public static void main(String[] args) {
handler();
}
private static void handler(){
try {
//实例化一个Socket,并指定服务器地址和端口
Socket client = new Socket(IP, PORT);
//开启两个线程,一个负责读,一个负责写
new Thread(new CReadHandlerThread(client)).start();
new Thread(new CWriteHandlerThread(client)).start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
*处理读服务器操作的线程
*/
class CReadHandlerThread implements Runnable{
private Socket client;
public CReadHandlerThread(Socket client) {
this.client = client;
}
@Override
public void run() {
BufferedReader br = null;
try {
while(true){
//读取服务器端数据
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String receive = br.readLine();//读入一行
System.out.println("服务器端返回数据:\t" + receive);
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
if(br != null){
br.close();
}
if(client != null){
client = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 处理写操作的线程
*/
class CWriteHandlerThread implements Runnable{
private Socket client;
public CWriteHandlerThread(Socket client) {
this.client = client;
}
@Override
public void run() {
DataOutputStream dos = null;
BufferedReader br = null;
try {
// while(true){
// //取得输出流
// dos = new DataOutputStream(client.getOutputStream());
// System.out.print("请输入: \t\n");
// //键盘录入
// br = new BufferedReader(new InputStreamReader(System.in));
// String send = br.readLine();
// //发送数据
// dos.writeUTF(send);
// }
dos = new DataOutputStream(client.getOutputStream());
String send = "metrics:tcp\n";
dos.write(send.getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally{
try{
if(br != null){
br.close();
}
if(client != null){
client = null;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
客户端发过来的内容:metrics:tcp发给客户端数据:TTLK38发给客户端数据:TTLK5发给客户端数据:TTLK97发给客户端数据:TTLK80发给客户端数据:TTLK21发给客户端数据:TTLK58...
服务器端返回数据: TTLK38服务器端返回数据: TTLK5服务器端返回数据: TTLK97服务器端返回数据: TTLK80服务器端返回数据: TTLK21服务器端返回数据: TTLK58...
java socket通信的简要举例相关推荐
- flex java socket通信
引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢?还是需要我们不断的学习,在学习的过程中会遇到 ...
- Java Socket通信实现多人多端网络画板聊天室
老规矩,先上实现的效果展示! Java Socket通信实现多人多端网络画板聊天室 本文介绍了一个基于Socket实现网络画板聊天室的完整过程,聊天室具备多人文本对话.同步绘图等功能. 初尝试 Soc ...
- Java Socket通信之TCP协议
文章目录 一. Java流套接字通信模型 1.TCP模型 2.TCP Socket常见API ServerSocket API Socket API 二.TCP流套接字编程 1.回显服务器 2.多线程 ...
- java socket通信
socket通信是指两台计算机的两个程序之间的通信,双向链路的每一端都称为一个socket,但分为客户机和服务器. java.net提供了ServerSocket和Socket类,分别用于服务器和客户 ...
- java Socket通信(一)
ava socket通信已经被封装好了主要使用两个类ServerSocket 和Socket 首先写一个1v1的通信 服务端 /** * */ package com.dnion.socket; im ...
- Java Socket 通信实例 - 转载
基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络 ...
- java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信
Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...
- c与java socket通信
通常情况下是java调用so库,调用协议好的方法传参,然后获取返回值 现要求java文件与c文件进行socket通信,可互为服务端和客户端,具体示例如下: GitHub - zpbshine/Sock ...
- Java——Socket通信原理
* Socket通信原理图解* A:Socket(中文翻译为:电源插座)套接字概述* 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识套接字* 通信的两端都有Socket(两端都 ...
最新文章
- 【数据挖掘】特征相关性挖掘神器-线性非线性关系一键挖掘!
- C++学习之路 | PTA乙级—— 1015 德才论 (25分)(精简)
- 计算机识别键盘流程,通过计算机视觉的方式识别并判断键盘输入
- 《程序设计技术》第六章例程
- 2012年参加油田象棋比赛的几盘棋
- ‘gperf‘ is missing on your system.
- qt如何编写android程序,如何利用Qt开发Android应用程序
- DataGridView显示时间格式
- yum安装报错No package xxx available
- xp怎样修改计算机mac地址,WinXP系统MAC地址修改的方法
- 此windows副本不是正版_阳光单职业传奇正版-阳光单职业传奇正版官网版v2.0
- js原生实现图片爆炸效果
- Windows/Windows Server 控制面板(Control Panel) 打开方式 通用
- 80和443端口的区别
- 为什么计算机能读懂 1 和 0 ?
- iOS调用手机振动和铃声
- ESP32 CAM与服务器(python)UDP视频传输
- OWT Server信令分析 (下) [Open WebRTC Toolkit]
- Python编程:从入门到退学(bushi)第二章
- 电路图软件推荐使用这一款!
热门文章
- 一文解读拉卡拉智能POS与传统POS的区别
- 2007版WORD删除分节符
- pert计算公式期望值_PERT和CPM的最大区别在于PERT()。A.在计算进度计划时使用分布均值(期望值)B.使用最可能的估算...
- 程序员要写博客吗?写博客能给我们带来什么?
- python ppt转pdf 苹果系统_批量将ppt转换为pdf的Python代码 只要27行!
- 破解S60 V3 系统~教程
- QQ群是小人聚集的场所,天大地大,我就不信你们能全网封杀我
- heic格式转化jpg,heic无损转jpg
- 博文批量发布工具新鲜出炉(支持wp、cnblogs等)
- 求是量子产业观察:构筑全栈、开放的云量子计算生态系统,微软为解决社会最复杂问题提供助力