基于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通信相关推荐

  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通信的简要举例

    Java的原生Socket(java.net.Socket)通信的举例: 首先是创建Socket的服务端:其次创建Socket的客户端. 通信过程如下: 客户端(C)向服务端(S)发送任意数据,服务端 ...

  10. Java——Socket通信原理

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

最新文章

  1. 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)
  2. 列表是否包含简短的包含功能?
  3. DIY Ruby CPU 分析——Part III
  4. 使用SAP WebIDE给SAP UI5应用添加data source
  5. 比较两个title是否相等(差点把我送走)
  6. 中文版GPT-2,可用于写小说、诗歌、新闻等
  7. 新版CSDN中如何快速转载别人的CSDN博客,详细方法与步骤!!!
  8. mysql数据库常见问题_初学者必读 MySQL数据库常见问题汇总
  9. Python风格总结: 复制列表
  10. 数字人民币如何操作使用?
  11. 第三章EF的基本使用 EF添加数据实体模型
  12. 联想笔记本电源管理-设置充电上下限
  13. MMC-HVDC仿真模型,pscad柔性直流输电仿真mmc仿真模型,双端mmc模型,MMC为21电平NLM和均压控制
  14. 用php写出一个网站的模板,25 个 PHP 的 Web 开发程序网站模板
  15. 机器学习基石 之 三大学习原则(Three Learning Principles)
  16. 五类/超五类/六类/超六类/七类等多类网线的比较
  17. opencv vector matlab,opencv实现 Matlab 寻找峰值函数 findpeaks
  18. 技术交流:对于大流量的网站,如何解决访问量的问题
  19. 请将磁盘插入‘‘U盘(F:)‘‘的解决方法
  20. Vue背景图片去白边

热门文章

  1. 今日浅谈循环 for与while
  2. Erdaicms旅游网站系统微信和手机端分销系统正式上线发布啦
  3. C#获取邮件客户端保存的邮箱密码
  4. Help Jimmy(递归)
  5. 今天才发现ff不支持navigate。
  6. 关于实验中的makefile相关知识
  7. 二叉树相关性质以及数学证明
  8. Python 语言介绍
  9. JavaScript夯实基础系列(二):闭包
  10. Java反射在整个程序运行中的位置