Socket是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。
Socket 保证了不同计算机之间的通信,也就是网络通信。
下面我们使用Socket来模拟一个小的聊天工具。
首先需要一个服务器端,也就是接收消息的一端。

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServer {public static void main(String[] args){try{//1.创建ServerSocket对象,指定端口号为5000ServerSocket serverSocket = new ServerSocket(5000);//2.使用accept()方法监听客户端,与客户端建立连接,获取客户端的socket对象Socket socket = serverSocket.accept();//3.获取客户端发来的消息流(获取用户请求信息)InputStream is = socket.getInputStream();//4.使用带有缓冲区的BufferedReader读取消息流BufferedReader br = new BufferedReader(new InputStreamReader(is));//5.读取客户端发来的信息String msg = null;while((msg = br.readLine())!=null){System.out.println("来自客户端的消息:"+msg);}//6.关闭各种资源br.close();is.close();socket.close();serverSocket.close();}catch (Exception e){e.printStackTrace();}}
}

创建客户端,用于发送消息

import java.io.*;
import java.net.Socket;//客户端
public class SocketClient{public static void main(String[] args) {try {//1.创建客户端Socket对象,传入服务器端的ip和端口号Socket socket = new Socket("localhost",5000);//2.创建输出流对象OutputStream os = socket.getOutputStream();//3.通过输出流将信息发送请求给服务器String loginInfo = "你好,我是李焕英";os.write(loginInfo.getBytes());//4.关闭流及Socket对象os.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

启动服务:
先启动服务器端,再启动客户端,会在服务器端的控制台输出“来自客户端的消息:你好,我是李焕英”。通信完毕。

需求升级:
由于要模拟聊天工具,需要服务器端不断地监听客户端(使用循环),客户端需要手动输入信息进行发送(使用Scanner)。
服务器端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;//服务器端
public class SocketServer {public static void main(String[] args) {try {//1、创建服务器端serversocket对象,指定端口号ServerSocket serverSocket = new ServerSocket(5000);Socket socket = null;InputStream inputStream = null;BufferedReader bfr = null;while (true){//2、使用accept()方法监听客户端的请求,建立连接,返回监听到的客户端的Socket对象socket= serverSocket.accept();//3.创建输入流,接收客户端的信息inputStream = socket.getInputStream();//4.使用BufferedReader读取客户端的信息bfr = new BufferedReader(new InputStreamReader(inputStream));String line = null;while((line = bfr.readLine())!=null){System.out.println("来自客户端的消息:"+line);}}/*//5.关闭流和socket连接bfr.close();inputStream.close();socket.close();serverSocket.close();*/} catch (IOException e) {e.printStackTrace();}}
}

客户端:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class SocketClient {public static void main(String[] args) {Scanner sc = new Scanner(System.in);try {boolean flag = true;while (flag){//创建socket对象Socket socket = new Socket("localhost",5000);//输出流OutputStream os = socket.getOutputStream();System.out.println("请输入要发送的信息:(按0退出)");String info = sc.next();if(!"0".equals(info)){os.write(info.getBytes());}else {flag = false;}os.close();socket.close();}} catch (IOException e) {e.printStackTrace();}}
}

效果:
客户端发送消息:

服务器端接受消息:

思考下,如何使用多线程处理多个客户端发送消息的请求?

使用Socket模拟实现聊天小工具相关推荐

  1. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  2. python微信自动聊天小工具

    一.主要通过 1.百度orc识别图片的文字 2.pyautogui截图,模拟粘贴 3.pymouse模拟鼠标点击 4.pyperclip模拟键盘复制 二.思路: 1.对微信聊天框进行截图作为原始图1 ...

  3. 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例

    用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29

  4. 用Python写一个模拟qq聊天小程序的代码实例

    前言 今天小编就为大家分享一篇关于用Python写一个模拟qq聊天小程序的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 Python 超简单的聊天 ...

  5. 模拟QQ聊天小项目收尾---界面展示服务端与客户端进行信息交互(用到的知识:io,线程,Swing界面,面向对象思想...... )

    大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文学到有用的干货知识,那么请您尽量点赞,关注,评论,收藏 这两天我一直在设计这 ...

  6. 用python做毕业设计小程序_用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  7. 如何利用python实现qq聊天_用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  8. 用Java来实现区块链原理并简单模拟开发一个小工具

    前几天心血来潮,用Java模拟实现了一个区块链小工具,该工具是单机版的,没有实现联网功能,属于是单节点的工具,但是对于区块链的核心wk逻辑功能都实现了,如:wk.钱包.转账.记账等功能.界面实现用到了 ...

  9. Android修炼之道—Talker聊天小工具

    这两天,参照陌陌的聊天界面,帮同学毕业设计做了一个聊天的小项目--Talker. 主要结合了JPush完成消息的推送. 单纯的聊天功能,写起来并不轻松,陌陌里面有大量的自定义控件,而且整个文件代码的架 ...

最新文章

  1. xcode 中 的工程模板
  2. 如何处理跨平台的自适应三
  3. C++四种强制类型转换 dynamic_cast,const_cast,static_cast,reinterpret_cast
  4. 卷不动也得继续学!紧跟vue3的步伐,再来get一波进阶新特性!
  5. border-radius 涨知识的写法
  6. 从 40% 跌至 4%,“糊”了的 Firefox 还能重回巅峰吗?
  7. spring elasticsearch 按条件删除_实战:项目数据源转为Elasticsearch
  8. 知识整理(你想要的Linux知识都在这里)
  9. Fuchsia中GN与Ninja构建demo
  10. Eclipse使用问题
  11. 拓端tecdat|【视频】R语言广义相加模型(GAM)在电力负荷预测中的应用
  12. Pr 视频效果:模糊与锐化
  13. mui架构app-终章(我是怎样决定放弃mui)
  14. 牛刀杀鸡-开源社区API之抢楼大作战
  15. 携程开源的分布式apollo技术,不吃透都对不起自己
  16. 独立同分布(Independently and Identically Distributed, iid)
  17. 轻松搞定EasyUI
  18. 安装包资源下载(暂整理)
  19. Windows系统扩充C盘空间系列方法总结
  20. 记一次个人博客被刷恶意评论的分析与解决

热门文章

  1. 设n个不同的整数排好序后存于T[1..n]中,若存在一个下标i(1≤ i ≤ n),使得T[i]=i。试设计一个有效算法找到这个下标,要求算法在最坏情形下的计算时间为O(log n)
  2. 数据结构——二叉树 1.0
  3. 基于“开源龙芯主板”的智能硬件产品即将众筹
  4. 计算机专业开题报告指导老师意见评语,开题报告指导教师评语内容及精选范文...
  5. Cornell datasets转coco .json格式
  6. android图片转换为二进制流,Android图片二进制与Bitmap、Drawable之间的转换
  7. 将两个span标签并列
  8. 腾讯安全玄武实验室推出快充安全测试服务
  9. 《SQL Server 2019从入门到精通(视频教学超值版)》简介
  10. mysql 获取唯一值_mysql 获取全局唯一值