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通信的简要举例相关推荐

  1. flex java socket通信

    引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢?还是需要我们不断的学习,在学习的过程中会遇到 ...

  2. Java Socket通信实现多人多端网络画板聊天室

    老规矩,先上实现的效果展示! Java Socket通信实现多人多端网络画板聊天室 本文介绍了一个基于Socket实现网络画板聊天室的完整过程,聊天室具备多人文本对话.同步绘图等功能. 初尝试 Soc ...

  3. Java Socket通信之TCP协议

    文章目录 一. Java流套接字通信模型 1.TCP模型 2.TCP Socket常见API ServerSocket API Socket API 二.TCP流套接字编程 1.回显服务器 2.多线程 ...

  4. java socket通信

    socket通信是指两台计算机的两个程序之间的通信,双向链路的每一端都称为一个socket,但分为客户机和服务器. java.net提供了ServerSocket和Socket类,分别用于服务器和客户 ...

  5. java Socket通信(一)

    ava socket通信已经被封装好了主要使用两个类ServerSocket 和Socket 首先写一个1v1的通信 服务端 /** * */ package com.dnion.socket; im ...

  6. Java Socket 通信实例 - 转载

    基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络 ...

  7. java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信

    Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...

  8. c与java socket通信

    通常情况下是java调用so库,调用协议好的方法传参,然后获取返回值 现要求java文件与c文件进行socket通信,可互为服务端和客户端,具体示例如下: GitHub - zpbshine/Sock ...

  9. Java——Socket通信原理

    * Socket通信原理图解* A:Socket(中文翻译为:电源插座)套接字概述* 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识套接字* 通信的两端都有Socket(两端都 ...

最新文章

  1. 【数据挖掘】特征相关性挖掘神器-线性非线性关系一键挖掘!
  2. C++学习之路 | PTA乙级—— 1015 德才论 (25分)(精简)
  3. 计算机识别键盘流程,通过计算机视觉的方式识别并判断键盘输入
  4. 《程序设计技术》第六章例程
  5. 2012年参加油田象棋比赛的几盘棋
  6. ‘gperf‘ is missing on your system.
  7. qt如何编写android程序,如何利用Qt开发Android应用程序
  8. DataGridView显示时间格式
  9. yum安装报错No package xxx available
  10. xp怎样修改计算机mac地址,WinXP系统MAC地址修改的方法
  11. 此windows副本不是正版_阳光单职业传奇正版-阳光单职业传奇正版官网版v2.0
  12. js原生实现图片爆炸效果
  13. Windows/Windows Server 控制面板(Control Panel) 打开方式 通用
  14. 80和443端口的区别
  15. 为什么计算机能读懂 1 和 0 ?
  16. iOS调用手机振动和铃声
  17. ESP32 CAM与服务器(python)UDP视频传输
  18. OWT Server信令分析 (下) [Open WebRTC Toolkit]
  19. Python编程:从入门到退学(bushi)第二章
  20. 电路图软件推荐使用这一款!

热门文章

  1. 一文解读拉卡拉智能POS与传统POS的区别
  2. 2007版WORD删除分节符
  3. pert计算公式期望值_PERT和CPM的最大区别在于PERT()。A.在计算进度计划时使用分布均值(期望值)B.使用最可能的估算...
  4. 程序员要写博客吗?写博客能给我们带来什么?
  5. python ppt转pdf 苹果系统_批量将ppt转换为pdf的Python代码 只要27行!
  6. 破解S60 V3 系统~教程
  7. QQ群是小人聚集的场所,天大地大,我就不信你们能全网封杀我
  8. heic格式转化jpg,heic无损转jpg
  9. 博文批量发布工具新鲜出炉(支持wp、cnblogs等)
  10. 求是量子产业观察:构筑全栈、开放的云量子计算生态系统,微软为解决社会最复杂问题提供助力