socket 工具_想自己也做个简易的聊天工具吗,老码农来教你!

socket实现简易聊天功能

最近在看网络编程这一块 小有收货 分享一哈 希望可以帮到有需要的人

编码开始

功能实现类如图

b8b1b057f11e7fcfae6949d294599e9f.png

client :主要模拟客户端 发送消息

server :服务端

serverHandler :服务端业务处理类

Test :测试类

1:首先开始写 Server 服务端 (@SuppressWarnings("all") 防止提示 看着难受 )

@Slf4j
@SuppressWarnings("all")
public class Server {
private static final int DEFAULT_PORT = 8888;
private static ServerSocket serverSocket;
public static void start(){
start(DEFAULT_PORT);
}
/**
* socket 连接建立
* @param defaultPort defaultPort
*/
private synchronized static void start(int port) {
if (serverSocket != null){
return;
}
try {
//通过构造函数创建ServerSocket
//如果端口合法且空闲,服务端就监听成功
serverSocket = new ServerSocket(port); http:// log.info ("服务端已启动,端口号:" + port); http:// log.info ("。。。。。。简易聊天室启动。。。。。。。");
//通过无线循环监听客户端连接
//如果没有客户端接入,将阻塞在accept操作上。
while (true) {
Socket socket = serverSocket.accept();
new Thread(new ServerHandler(socket)).start();
}
}catch (Exception e){
e.printStackTrace(); http:// log.info ("创建socket 异常");
}finally {
if(serverSocket!=null){
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace(); http:// log.info ("关闭socket 异常");
}
serverSocket = null;
}
}
}

04459d0e506c8e9d41a3edcac190a30f.png
2:serverHandler 服务业务处理端
@Slf4j
public class ServerHandler implements Runnable {
/**
* socket 连接
*/
private Socket socket;
ServerHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader in = null;
PrintWriter out = null;
BufferedReader reader;
try{
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
reader = new BufferedReader(new InputStreamReader( http:// System.in ));
String result;
String outPut;
while ((result = in.readLine()) != null) { http:// log.info (("client :" + result));
if(result.equals("exit")){
out.println("exit"); http:// log.info ("哇哈哈 聊天结束了!!!");
break;
}
outPut =reader.readLine();
out.println(outPut);
}
}catch (Exception e){
e.printStackTrace();
log.error("server 处理处理异常 ");
}finally {
if(out!=null){
out.close();
}
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

3:编写我们的客户端

@Slf4j
public class Client {
private static final int DEFAULT_PORT = 8888;
private static final String DEFAULT_IP = "127.0.0.1";
public static void send(){
send(DEFAULT_IP,DEFAULT_PORT);
}
/**
* 发送
* @param ip defaultIp
* @param port defaultPort
*/
private static void send(String ip, int port) {
Socket socket = null;
BufferedReader br = null;
PrintWriter pw = null;
BufferedReader reader;
try{
socket = new Socket(ip,port);
pw = new PrintWriter(socket.getOutputStream(),true);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
reader = new BufferedReader(new InputStreamReader( http:// System.in ));
String input ; http:// log.info ("聊天开始。。。。。。输入exit即可关闭");
while ((input = reader.readLine())!=null){
pw.println(input);
String s = br.readLine();
if(s.equals("exit")){ http:// log.info ("聊天终止。。。。。。");
break;
} http:// log.info (("server answer :" + s));
}
}catch (Exception e){
log.error("创建连接失败:"+e.getLocalizedMessage());
}finally {
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(pw!=null){
pw.close();
}
}
}
}

4:编写测试类 进行测试

public class Test {
public static void main(String[] args) throws InterruptedException {
new Thread(() -> {
Server.start();
}).start();
Thread.sleep(2000);
new Thread(() ->{
Client.send();
}).start();
}
}

界面运行效果如图

4d50328e85cec409c027773890c24bc3.png

fc2b9ee21ce737c15bcadf391f1cf7e3.png

这样 简易聊天功能实现了

@Slf4j 这个注解 来自于lombok

pom依赖

<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

idea 工具也是需要安装lombok插件的

我这里已经安装好了 这个插件 需要使用的话 必须要安装的

愿君度过美好的一天,明天加油

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值