java:socket通信
基于tcp协议,建立稳定连接的点对点的通信。
实时,快速,安全性高,占用系统资源高,效率低
请求-响应模式(request, response)
客户端: 在网络通讯中,第一次主动发起通讯的程序叫做客户端程序。
服务器:第一次通讯中等待连接的程序被称作服务器端程序。
tcp有点像两个人打电话,必须电话线接通,两个人才可以通话。
Socket:发送TCP消息
ServerSocket:创建服务器
package com.test;import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;// 客户端
public class SocketClient {public static void main(String[] args) throws IOException{Socket client = new Socket("localhost", 8888);client.getOutputStream();// // 输入
// BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
// String msg = br.readLine(); // 阻塞式方法
// System.out.println(msg);DataInputStream dis = new DataInputStream(client.getInputStream());String msg = dis.readUTF();System.out.println(msg);}
}
package com.test;import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;// 服务端
public class SocketServer {public static void main(String[] args) throws IOException{// 创建服务器,指定端口ServerSocket server = new ServerSocket(8888);// 接受客户端连接, 阻塞式Socket socket = server.accept();System.out.println("一个客户端建立连接");// 发送数据String msg = "tcp编程";// 输出流
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// bw.write(msg);
// bw.newLine();
// bw.flush();DataOutputStream dos = new DataOutputStream(socket.getOutputStream());dos.writeUTF(msg);dos.flush();}
}
基于Socket,ServerSocket实现类似聊天室的功能
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;// 服务器
public class Server {private List<Channel> channels = new ArrayList<Channel>();public static void main(String[] args) throws IOException{Server s = new Server();s.start();}public void start() throws IOException{ServerSocket server = new ServerSocket(8888);while(true){Socket client = server.accept();Channel n = new Channel(client);channels.add(n);new Thread(n).start();}}private class Channel implements Runnable{private DataInputStream dis;private DataOutputStream dos;private boolean isRunning = true;public Channel(Socket client){try {dis = new DataInputStream(client.getInputStream());dos = new DataOutputStream(client.getOutputStream());} catch (IOException e) {CloseUtil.close(dis,dos);isRunning = false;}}private String recevieMsg(){String msg = "";try {//System.out.println("server..等待读...");return dis.readUTF();} catch (IOException e) {CloseUtil.close(dis,dos);isRunning = false;}return msg;}private void sendMsg(String msg){// 输出流try {dos.writeUTF("服务器-->"+msg);dos.flush();} catch (IOException e) {CloseUtil.close(dis,dos);isRunning = false;}}private void sendMsgToOthers(){// 输出流try {System.out.println("channels.size() "+channels.size());String msg = recevieMsg();for(Channel n : channels){if(n == this){continue;}System.out.println("recevieMsg() "+msg);n.sendMsg(msg);}} catch (Exception e) {CloseUtil.close(dis,dos);isRunning = false;}}@Overridepublic void run() {while(isRunning){sendMsgToOthers();}}}
}
import java.io.IOException;
import java.net.Socket;// 客户端
public class Client {public static void main(String[] args) throws IOException{Socket socket = new Socket("localhost", 8888);new Thread(new Send(socket)).start(); // 一条路径new Thread(new Receive(socket)).start(); // 一条路径}
}
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;// 发送
public class Send implements Runnable{// 管道流private BufferedReader br = null;// 输出流private DataOutputStream dos = null;private boolean isRunning = true;public Send(){br = new BufferedReader(new InputStreamReader(System.in));}public Send(Socket client){this();try {dos = new DataOutputStream(client.getOutputStream());} catch (IOException e) {isRunning = false;CloseUtil.close(dos,br);}}private String getMsgFromConsole(){try {return br.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "";}private void sendMsg(){String msg = getMsgFromConsole();try {dos.writeUTF(msg);dos.flush(); // 强制刷新} catch (IOException e) {isRunning = false;CloseUtil.close(dos,br);}}@Overridepublic void run() {while(isRunning){sendMsg();}}
}
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;// 接收
public class Receive implements Runnable{// 输出流private DataInputStream dis = null;private boolean isRunning = true;public Receive(){}public Receive(Socket client){try {dis = new DataInputStream(client.getInputStream());} catch (IOException e) {isRunning = false;CloseUtil.close(dis);}}public String readMsg(){String msg = "";try {//System.out.println("readUTF()之前..."+System.currentTimeMillis());msg = dis.readUTF();//System.out.println("readUTF()之后..."+System.currentTimeMillis());return msg;} catch (IOException e) {isRunning = false;CloseUtil.close(dis);}return msg;}@Overridepublic void run() {while(isRunning){System.out.println(readMsg());}}
}
import java.io.Closeable;
import java.io.IOException;public class CloseUtil {public static void close(Closeable...cios){for(Closeable cio : cios){try {if(null != cio){ cio.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}
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通信的简要举例
Java的原生Socket(java.net.Socket)通信的举例: 首先是创建Socket的服务端:其次创建Socket的客户端. 通信过程如下: 客户端(C)向服务端(S)发送任意数据,服务端 ...
- Java——Socket通信原理
* Socket通信原理图解* A:Socket(中文翻译为:电源插座)套接字概述* 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识套接字* 通信的两端都有Socket(两端都 ...
最新文章
- 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)
- 列表是否包含简短的包含功能?
- DIY Ruby CPU 分析——Part III
- 使用SAP WebIDE给SAP UI5应用添加data source
- 比较两个title是否相等(差点把我送走)
- 中文版GPT-2,可用于写小说、诗歌、新闻等
- 新版CSDN中如何快速转载别人的CSDN博客,详细方法与步骤!!!
- mysql数据库常见问题_初学者必读 MySQL数据库常见问题汇总
- Python风格总结: 复制列表
- 数字人民币如何操作使用?
- 第三章EF的基本使用 EF添加数据实体模型
- 联想笔记本电源管理-设置充电上下限
- MMC-HVDC仿真模型,pscad柔性直流输电仿真mmc仿真模型,双端mmc模型,MMC为21电平NLM和均压控制
- 用php写出一个网站的模板,25 个 PHP 的 Web 开发程序网站模板
- 机器学习基石 之 三大学习原则(Three Learning Principles)
- 五类/超五类/六类/超六类/七类等多类网线的比较
- opencv vector matlab,opencv实现 Matlab 寻找峰值函数 findpeaks
- 技术交流:对于大流量的网站,如何解决访问量的问题
- 请将磁盘插入‘‘U盘(F:)‘‘的解决方法
- Vue背景图片去白边