Java网络编程

目录

网络编程

1、windows系统的 端口检测 工具 tcping

下载地址 :https://download.elifulkerson.com//files/tcping/0.39/tcping.exe

把 tcping.exe 工具放到目录 C:\Windows\System32下

打开控制台

使用方式 tcping ip 端口

这个工具类似于 linux系统上的 telnet工具 可以帮助我们在Windows系统上检测 远程端口的连通性

2、基于TCP协议的Socket(客户端)和ServerSocket(服务端)

Java的Socket是Java语言提供的一种用于网络通信的机制。它基于TCP/IP协议,允许应用程序通过网络进行数据交换。Socket允许客户端和服务器之间建立连接,并在连接上进行数据传输。

Java中的Socket编程涉及两种基本类型:服务器Socket(ServerSocket)和客户端Socket(Socket)。服务器Socket用于服务器端,监听客户端的连接请求并接受连接,而客户端Socket用于客户端,发起连接并与服务器通信。

简单的代码示例: 这个代码可以结合 上面的 NIO Selector 实现的群聊Demo 对比一下

服务端

java 复制代码
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {

    public static void main(String[] args) {
        //创建服务器Socket对象
        int port = 18848;
        try (ServerSocket ss = new ServerSocket(port)) {
            while (true) {
                //监听客户端连接,返回一个对应的Socket对象
                Socket s = ss.accept();
                //为每一个客户端开启一个线程
                new Thread(() -> {
                    try (InputStream inputStream = s.getInputStream();
                         OutputStream outputStream = s.getOutputStream();
                         BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(outputStream));) {
                        //接收数据写到文本文件
                        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                        String str = br.readLine();
                        while (str != null) {
                            // 打印客户端输入的内容
                            System.out.println(str);
                            //给出反馈
                            bwServer.write("Accept Successfully!");
                            bwServer.newLine();
                            bwServer.flush();
                            str = br.readLine();
                        }

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

客户端A

java 复制代码
import java.io.*;
import java.net.Socket;

public class ClientA {

    public static void main(String[] args){
        //创建客户端Socket对象
        try (Socket s = new Socket("127.0.0.1", 18848);
             BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
             BufferedReader sbr = new BufferedReader(new InputStreamReader(s.getInputStream()));){

            String line;
            while ((line = br.readLine()) != null) {
                bw.write("客户端A:"+line);
                bw.newLine();
                bw.flush();

                // 新增:读取并打印服务器反馈
                String serverResponse = sbr.readLine();
                if (serverResponse != null) {
                    System.out.println("服务器反馈:" + serverResponse);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端B

java 复制代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ClientB {

    public static void main(String[] args){
        //创建客户端Socket对象
        try (Socket s = new Socket("127.0.0.1", 18848);
             BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
             BufferedReader sbr = new BufferedReader(new InputStreamReader(s.getInputStream()));){

            String line;
            while ((line = br.readLine()) != null) {
                bw.write("客户端B:"+line);
                bw.newLine();
                bw.flush();

                // 新增:读取并打印服务器反馈
                String serverResponse = sbr.readLine();
                if (serverResponse != null) {
                    System.out.println("服务器反馈:" + serverResponse);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

演示效果如下:

3、 基于UDP协议的DatagramSocket

相关推荐
骄马之死1 小时前
SpringMVC + SpringBoot 核心知识点总结
java·spring boot·后端
liulilittle2 小时前
关于拥塞控制的几点思考
网络·c++·tcp/ip·计算机网络·信息与通信·tcp·通信
AOwhisky2 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
Phantom Void2 小时前
服务器处理客户端请求的设计方法
linux·运维·网络
王码码20352 小时前
办了500M宽带看视频还是卡?我用NAS搭了个测速服务器,宽带有没有缩水一测便知
网络·接口·nas
ylscode2 小时前
Anthropic Claude Oceanus意外泄露:Mythos系列AI红队测试遭遇API代理滥用危机
网络·人工智能·安全·web安全·安全威胁分析
郑洁文3 小时前
基于Spring Boot的流浪动物救助网站
java·spring boot·后端·毕设·流浪动物救助
螺丝钉code3 小时前
JAVA项目 Claude code CLAUDE.md 到底应该怎么写
java·人工智能·claude code
myenjoy_14 小时前
MQTT 与 Sparkplug B——从车间到云端的最后一公里
网络·python
摇滚侠5 小时前
Maven 入门+高深 单一架构案例 54-59
java·架构·maven·intellij-idea