客户端代码:

package com.lcx.socket;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/*** * @author*/
public class SocketClient {public static void main(String[] args) {try {/*** 回想下流的读入写出概念:*       如果是磁盘IO,那么何为读入?将磁盘内容读入到内存中。何为写出?将内存的内容写出到磁盘中持久化。*      如果是网络IO,那么何为读入?将网络传输的内容读入到内存中。何为写出?将内存的内容写出到网络传输中。* 以InputStream/Reader结尾的一般是 读入字节/字符流。* 以OutputStream/Writer结尾的一般是 写出字节/字符流。* 主要步骤:* 1、客户端根据服务器端IP地址和端口号获取socket对象。* 2、根据socket对象获取读入流,获取服务端反馈的内容。将字节流转换成字符流,然后处理信息。* 3、根据socket对象获取写出流,用于想服务端发送内容。同样将字节流转换成字符流,然后处理信息。* 4、关流、关socket* 用单线程实现客户端和服务端简单的消费推送* 随后实现客户端和服务端进行通话*///1、获取socket对象Socket socket = new Socket(InetAddress.getLocalHost(), 6666);//2、获取读入流BufferedReader acceptServerInfo = new BufferedReader(new InputStreamReader(socket.getInputStream()));/*** 网上字符流的写出大都用的PrintWriter,我想字符流读入用的 BufferedReader那么字符流的写出也可以用BufferedWriter* 实际上是可以,PrintWriter.println可以直接结束本行开始下一个文本行,而BufferedWriter必须BufferedWriter.newLine* 手动结束本行开始下一行。write方法调用后,再其后必须调用newLine实现该文本行的结束,否则BufferedReader读取不到* *///3、获取写出流,BufferedWriter实现BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write("客户端:我是客户端");bufferedWriter.newLine();bufferedWriter.write("客户端:我是客户端的王五");bufferedWriter.newLine();bufferedWriter.write("客户端:服务端的张三在吗?");bufferedWriter.newLine();bufferedWriter.flush();//3、获取写出流,PrintWriter实现PrintWriter sendToServerInfo = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//PrintWriter.print 打印,PrintWriter.println 打印后终止该行,此行为一个文本行sendToServerInfo.println("客户端:我是客户端");sendToServerInfo.println("客户端:我是客户端的王五");sendToServerInfo.println("客户端:服务端的张三在吗?");sendToServerInfo.flush();//读取客户端反馈的信息while(acceptServerInfo.ready()){String line = acceptServerInfo.readLine();System.out.println(line);}sendToServerInfo.close();bufferedWriter.close();acceptServerInfo.close();socket.close();    } catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

服务端代码:

package com.lcx.socket;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServer {public static void main(String[] args) {/*** 服务端* 1、根据端口号(并不需要IP,本机就是服务端)创建ServerSocket对象* 2、根据ServerSocket对象accept方法创建Socket对象* 3、同客服端一样,根据socket对象获取读入流,获取服务端反馈的内容。将字节流转换成字符流,然后处理信息。* 4、根据socket对象获取写出流,用于想服务端发送内容。同样将字节流转换成字符流,然后处理信息。* 5、关流、关socket*/try {//1、创建ServerSocket对象ServerSocket serverSocket = new ServerSocket(6666);//2、根据ServerSocket对象创建Socket对象,等待客户端连接Socket socket = serverSocket.accept();//3、接受客户端信息BufferedReader acceptClientInfo = new BufferedReader(new InputStreamReader(socket.getInputStream()));//4、给客户端信息PrintWriter sendToClientInfo = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//读取客户端发来的信息while(acceptClientInfo.ready()){//读取一个文本行String info = acceptClientInfo.readLine();System.out.println(info);}//给客户端发信息sendToClientInfo.println("服务端:我是服务端的张三");sendToClientInfo.println("服务端:你是客户端的李四吗?");sendToClientInfo.flush();sendToClientInfo.close();acceptClientInfo.close();socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}

简单推送消息结果截图:

服务端和客户端进行消息的相互推送

客服端代码

package com.lcx.socket;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/*** * @author*/
public class SocketClient2 {public static void main(String[] args) {try {/*** 回想下流的读入写出概念:*      如果是磁盘IO,那么何为读入?将磁盘内容读入到内存中。何为写出?将内存的内容写出到磁盘中持久化。*      如果是网络IO,那么何为读入?将网络传输的内容读入到内存中。何为写出?将内存的内容写出到网络传输中。* 以InputStream/Reader结尾的一般是 读入字节/字符流。* 以OutputStream/Writer结尾的一般是 写出字节/字符流。* 主要步骤:* 1、客户端根据服务器端IP地址和端口号获取socket对象。* 2、根据socket对象获取读入流,获取服务端反馈的内容。将字节流转换成字符流,然后处理信息。* 3、根据socket对象获取写出流,用于想服务端发送内容。同样将字节流转换成字符流,然后处理信息。* 4、关流、关socket* 用单线程实现客户端和服务端简单的消费推送* 随后实现客户端和服务端进行通话*/System.out.println("-------------客户端界面------------------");//1、获取socket对象Socket socket = new Socket(InetAddress.getLocalHost(), 6666);//2、获取读入流BufferedReader acceptServerInfo = new BufferedReader(new InputStreamReader(socket.getInputStream()));//3、获取写出流PrintWriter sendToServerInfo = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//从控制台,输入消息和服务端对话,输入流
//          BufferedReader inputInfo = new BufferedReader(new InputStreamReader(System.in));Scanner inputInfo = new Scanner(System.in);while(true){//发送消息
//              String str = inputInfo.readLine();String str = inputInfo.nextLine();if("end".equals(str)){break;}System.out.println("客户端:"+str);sendToServerInfo.println("客户端:"+str);sendToServerInfo.flush();//接受消息String acStr = acceptServerInfo.readLine();System.out.println(acStr);}sendToServerInfo.close();acceptServerInfo.close();socket.close();    } catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

服务端代码

package com.lcx.socket;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class SocketServer2 {public static void main(String[] args) {/*** 服务端* 1、根据端口号(并不需要IP,本机就是服务端)创建ServerSocket对象* 2、根据ServerSocket对象accept方法创建Socket对象* 3、同客服端一样,根据socket对象获取读入流,获取服务端反馈的内容。将字节流转换成字符流,然后处理信息。* 4、根据socket对象获取写出流,用于想服务端发送内容。同样将字节流转换成字符流,然后处理信息。* 5、关流、关socket*/try {System.out.println("-------------服务端界面------------------");//1、创建ServerSocket对象ServerSocket serverSocket = new ServerSocket(6666);//2、根据ServerSocket对象创建Socket对象,等待客户端连接Socket socket = serverSocket.accept();//3、获取读入流BufferedReader acceptClientInfo = new BufferedReader(new InputStreamReader(socket.getInputStream()));//4、获取写出流PrintWriter sendToClientInfo = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
//          BufferedReader inputInfo = new BufferedReader(new InputStreamReader(System.in));Scanner inputInfo = new Scanner(System.in);while(true){//读取客户端信息String info = acceptClientInfo.readLine();System.out.println(info);
//              String str = inputInfo.readLine();String str = inputInfo.nextLine();if("end".equals(str)){break;}//给客户端发信息System.out.println("服务端:"+str);sendToClientInfo.println("服务端:"+str);sendToClientInfo.flush();}sendToClientInfo.close();acceptClientInfo.close();socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}

对话截图:


JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息相关推荐

  1. 服务端如何推送消息给客户端?

    大家好,我是前端西瓜哥,今天带大家了解一下服务端如何推送消息给客户端. 有时候,我们希望服务端能够主动推送一些信息给客户端.但 HTTP 协议只能让客户端发起请求然后服务端响应,而无法让服务端主动去发 ...

  2. SignalR 实现web浏览器客户端与服务端的推送功能

    SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...

  3. Java网络编程(一)- 一个简单的服务端/客户端应用程序

    在Java中,我们使用java.net.Socket及其相关类来完成有关网络的相关功能.Socket类非常简单易用,因为Java技术隐藏了建立网络连接和通过连接发送数据的复杂过程.下面所说的内容只适用 ...

  4. 连接主机Java网络编程(一)- 一个简单的服务端/客户端应用程序

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,迎欢批评指正 在Java中,我们应用java.net.Socket及其关相类来成完有关络网的关相功能.Socket类非常简略易用,因为Java术技 ...

  5. linux网络编程之用多线程实现客户端到服务端的通信(基于udp)

    1.开启一个线程接受数据,主线程发送数据的代码 #include <unistd.h> #include <stdio.h> #include <stdlib.h> ...

  6. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  7. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接 ...

  8. java网络编程Socket实现客户端向服务端发送信息

    (可按目录按需阅读,我一般会整理的比较细) 前置知识 java IO Socket 什么是socket?socket字面意思其实就是一个插口或者套接字,包含了源ip地址.源端口.目的ip地址和源端口. ...

  9. 【狂神Java笔记】Java网络编程实战详细笔记整理(附代码)

    1.1 概述 计算机网络: 计算机网络是指将地理位置不同 的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递 ...

最新文章

  1. 项目实施中应该注意的事项
  2. flume与Mosquitto的集成
  3. Web后端语言模拟http请求(带用户名和密码)实例代码大全
  4. SAP 电商云 Spartacus UI 产品明细页面路由路径的自定义配置
  5. Java与本机代理–他们所做的强大功能
  6. 前端学习(2733):重读vue电商网站43之使用 lodash 中 cloneDeep(obj) 来实现深拷贝
  7. 访问linux端口失败_教你如何配置Linux服务器防火墙端口规则
  8. Linux内核分析 - 网络[八补]:IP协议补充
  9. java向上和向下的区别_Java的向上和向下转型
  10. PyQt之按钮传递鼠标按下事件点击失效
  11. 高数复习:极限与连续,一元函数微分学,一元函数积分学,多元函数微分学以及微分方程(思维导图版知识点总结)
  12. 游戏开发流程及QA职责
  13. 阿里海量大数据平台的运维智能化实践
  14. [iOS]在xib中设置YYLabel自适应高度
  15. 手绘计算机比赛海报,手绘海报大赛 | 匠心
  16. 天正菜单栏不见了怎么显示出来_天正建筑菜单栏不见了怎么调出来
  17. input发送a.jax_Java EE 7和JAX-RS 2.0
  18. 【数字图像处理】【个人入门记录】 绪论
  19. 浅析即时通讯开发实时通信技术中的视频编解码
  20. Unity ILRuntime的基本实现流程(0基础)

热门文章

  1. mac php7.0 yaf 安装,MAC MAMP PRO PHP YAF 安装
  2. java集合中中文排序_利用Collator和Collections.sort对list进行中文排序,注意与Arrays.sort的区别...
  3. CAN总线技术 | 数据链路层03 - CAN总线竞争与仲裁机制
  4. python没有联网_无网环境下的 Python 开发指南
  5. CMake笔记-使用CMake GUI生成MinGW的Makefiles及编译hiredis
  6. MySQL笔记-binlog理论及binlog回滚恢复数据
  7. Java笔记-解决Required long parameter 'XXX' is not present
  8. Qt工作笔记-进入文件夹或打开网站(QDesktopServices::openUrl的使用)
  9. 大三软件工程小项目-小技术集合-读取XML文件及运行外部程序
  10. rust开发环境_Rust 环境搭建