chat1-ClientServer连接

此文件中描述了Client和Server连接的过程

一、Server:

服务端用ServerSocket对象开启一个端口。并用while循环调用ServerSocket对象的accept()

方法等待客户端连接。

package chat1;
import java.io.*;        import java.util.Map;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {/**聊天室服务端*/
    public static void main(String[] args) {
        Server server = new Server();
        server.start();
    }
    //java.net.ServerSocket类似于聊天室服务端的"总机",该"总机"上有若干的"插座"
    //        每个插座可以连接一个客户端的插头,实现让多个客户端连接到同一个"总机"上
    //        ServerSocket有两个功能:
    //        1:实例化时向系统申请服务端口(客户端先通过这个端口与总机建立连接)
    //        2:一旦一个客户端与总机建立连接,总机就会分配一个"插座"与该客户端沟通
    private ServerSocket serverSocket;
    public Server(){
        try {
            System.out.println("正在启动服务端...");
            //实例化ServerSocket并指定服务端口,客户端就是通过这个端口连接服务端的。
            //(该端口不能与当前计算机上其他应用程序申请的端口重复,否则会抛出异常:
            // java.net.BindException: Address already in use:
            serverSocket = new ServerSocket(8088);
            System.out.println("服务端启动完毕");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void start(){
        try {
            while(true) {
                System.out.println("等待客户端连接...");
                //ServerSocket上一个重要的方法: Socket accept()
                // 该方法用于接受客户端的连接,此方法是一个阻塞方法,调用后方法会"卡住"
                // 开始等待客户端的连接,一旦一个客户端连接,那么此方法会立即返回一个
            // Socket实例然后继续往下运行(通过这个Socket就可以与刚建立连接的客户端交互了)
                Socket socket = serverSocket.accept();
                System.out.println("一个客户端连接了!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

二、Client:

客户端用new Socket("localhost",8088)连接服务端

package chat1;
import java.io.*;
import java.net.Socket;

/**聊天室的客户端*/
public class Client {
    //java.net.Socket 单词释义:"插座"。封装了TCP协议的通讯细节,使用它可以与服务端建立

//连接并进行通讯
    private Socket socket;

    //构造方法,用于初始化客户端
    public Client(){
        try {
            /*Socket常用构造器:  Socket(String host,int port)
                创建Socket对象时,就会让客户端贺服务端建立连接,此时需要指定服务端的IP

地址和端口
                如果与服务端连接失败,则会抛出异常
                注: IP地址中, "localhost":表示本机,"127.0.0.1":也表示本机
             */
            System.out.println("正在连接服务端...");
            /*  Windows系统查看自己电脑的IP地址:   

1:win+r  键盘上(窗口键+R)  2:输入cmd 打开控制台 3:输入ipconfig 查看IP地址
                Mac系统查看IP地址:   步骤1:打开【终端】    步骤2:输入:/sbin/ifconfig
             */
            socket = new Socket("localhost",8088);
            System.out.println("与服务连接成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        Client client = new Client();
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 实战-05-nginx 反向代理实现域名到指定的 ip

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

杂谈-青少年信奥赛

青少年信奥赛详解 一、引言 青少年信息学奥林匹克竞赛(简称信奥赛或NOI)是一项面向全球青少年的计算机科学竞赛,旨在通过竞赛的形式,激发青少年对计算机科学和编程的兴趣,培养他们的创新思维和解决问题的能力。自诞生…

【c语言】探索内存函数

探索内存函数 memcpy函数memmove函数memset函数memcmp函数: memcpy函数 memcpy函数声明: void * memcpy ( void * destination, const void * source, size_t num );将source空间下的num个字符复制到dest中去 函数的使用: 将字符数组a的5字…

用java实现客服聊天+网络爬虫下载音乐(java网络编程,io,多线程)

一 灵感: 在2022年的暑假,也就是我即将迈进高三的那个暑假,我并没有察觉自己应该要学习了,还是和过往的暑假一样玩着王者荣耀,凌晨2点睡觉,中午12点起床。我依稀记得这种状态一直持续到8月19。然而离开学还…

【MySQL】Linux安装MySQL

一、center OS环境准备 为了在Linux系统中查看MySQL5.8与8.0版本的区别 我们要准备两个虚拟机,需要的软件:VMware和CentOS7 因为博主之前在学习redis的时候已经安装过一个虚拟机了,所以我就直接克隆了一个CentOS2.0 修改mac地址&#xff0…

STM32作业实现(二)串口控制led

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

用python画一艘“福建舰”

import turtle # 设置画布和画笔 screen turtle.Screen() screen.bgcolor("white") pen turtle.Turtle() pen.speed(10) pen.color("blue") pen.penup() # 航母主体(简化为一个矩形) pen.goto(-200, 0) pen.pen…

路由和交换网络技术有哪些内容?

1. 路由器和交换机的基本概念:了解路由器和交换机的定义、功能和区别,以及它们在网络中的重要作用。 2. 路由协议:掌握常见的路由协议,如静态路由、动态路由和默认路由,以及它们的工作原理和使用场景。 3. VLAN和IP地址…

深入理解Java中的List集合:解析实例、优化技巧与最佳实践

一:List 集合的基础 1.1 什么是 List 集合? List 集合是 Java 集合框架中的一种有序、可重复的数据结构,它继承自Collection 接口,允许存储多个元素。 与数组不同,List 集合的大小是动态可变的,可以根据…

通过指针变量访问整型变量

有两个与指针变量有关的运算符: (1)&:取地址运算符。 (2)*:指针运算符(或称间接访问运算符)。 例如:&a为变量a的地址,*p为指针变量p所指向的存储单元。 编写程序: 运行结果…

【面试经典150题】移除元素

目录 一.移除元素 一.移除元素 这题的思路非常清晰&#xff0c;可以使用迭代器遍历找到需要删除的元素使用erase删除即可&#xff1a; #include<iostream> #include<vector>using namespace std;class Solution { public:int removeElement(vector<int>&…

设计模式(六)结构型模式---桥接模式

文章目录 桥接模式简介结构优点UML图具体实现UML图代码实现 桥接模式简介 桥接模式是一种将抽象与实现分离&#xff0c;使它们独立变化。然后利用组合关系来代替继承关系&#xff0c;大大的降低了抽象和实现的耦合度的设计模式。实际使用&#xff1a; JDBC源码分析&#xff0c…

C语言习题~day26

1.以下关于枚举的说法&#xff0c;哪个是正确的&#xff1f; A.枚举类型可以具有浮点数作为枚举值。 B.枚举类型在内存中存储为整数。 C.枚举类型可以包含字符串作为枚举值。 D.枚举类型不能作为函数的参数传递。 B 2.下面代码的结果是&#xff1a;&#xff08; &#xff0…

Kotlin 继承和实现

文章目录 前言继承&#xff08;extend&#xff09;实现&#xff08;implement&#xff09;继承与实现 前言 在 Kotlin 中&#xff0c;继承和实现都是在类名后使用冒号:&#xff0c;后边加上其他类或接口的名称来表示&#xff0c;二者之间写法没有太大区别&#xff08;类需要加…

Xcode下载安装

1.Xcode可用版本判断&#xff1a; 2.Xcode下载安装&#xff1a; 方案1:AppStore 下载更新 若方案1失败则 方案2:指定版本Xcode包下载解压安装 苹果下载 3.Xcode命令行工具插件安装 xcode-select --install 备注&#xff1a; xcode_x.x.x.xip(压缩包存在时效性(使用前24h/…

Mac专用投屏工具:AirServer 7 for Mac 激活版下载

AirServer 7 是一款在 Windows 和 macOS 平台上运行的强大的屏幕镜像和屏幕录制软件。它能够将 iOS 设备、Mac 以及其他 AirPlay、Google Cast 和 Miracast 兼容设备的屏幕镜像到电脑上&#xff0c;并支持高质量的录制功能。总的来说&#xff0c;AirServer 7 是一款功能全面的屏…

Mybatis编写SQL

文章目录 一、用注解编写1.1 增普通增加获取自增ID 1.2 删和改1.3 查单表查询多表查询 二、用xml编写2.1 使用xml的流程2.2 增普通增加获取自增ID 2.3 删 和 改2.4 查 三、#{} 和 ${}3.1 #{} 、${}3.1 预编译 SQL 、即时编译SQL 两种写法是可以同时存在的 一、用注解编写 1.1 …

QuillEditor+vue3 本身不支持行高的配置,那么如何配置行高?

通过查阅官方文档和众多资料发现&#xff0c;在QuillEditor的使用中&#xff0c;行高的配置并不像加粗、斜体等样式仅需配置关键词即可&#xff0c;那么QuillEditor的行高如何配置呢&#xff1f; 首先我们仍然要在富文本的配置的modules中写入行高的配置项 const myOptions …

linux bind函数

bind函数的目的是让把客户端对应的端口(port)地址和ip地址绑定到客户端 [参考](Linux之bind 函数&#xff08;详细篇&#xff09;_linux bind函数-CSDN博客)

Text1作业

Text1作业 Text1作业 题量: 16 满分: 100.0 一. 单选题&#xff08;共5题&#xff09; 1【单选题】A______ is a functional unit that interprets and carries out instructions.&#xff08;5.0分&#xff09; A memoryB processorC storageD network 2【单选题】A____…