Java网络编程聊天室——单线程(二)

本文介绍了一个简单的单线程聊天室程序实现,包括服务器端和客户端的代码编写过程。使用Java语言,通过ServerSocket和Socket类完成客户端与服务器之间的通信。

通过上一个博客对网络编程的介绍,今天来编写相应的代码。

首先对这个项目做一个小的规划:

目标:单线程的聊天室

功能:

1、服务器

2、客户端

业务:

1、客户端发数据给服务器,服务器接受数据,并打印。

2、服务器相应数据给客户端,客户端接收数据,并打印。

技术:

1、服务器:ServerSocket类

2、客户端:Socket类

3、两个程序:服务器程序、客户端程序

4、JDK8,Maven管理

一、实现步骤: 

(1)创建Maven工程(两个程序:服务器程序,客户端程序)

(2)Maven配置

(3)服务器端实现

a.准备ServerSocket对象

b.接受客户端连接,Socket对象

c.接收数据,发送数据

(4)客户端实现

a.准备Socket对象,连接到服务器端

b.发送数据,接收数据

Maven的多模块可以使项目能够将服务端和客户端连接起来。

我们建立一个chat-room-client和chat-room-sever模块。

<packaging>pom</packaging>
<modules>
    <module>chat-room-client</module>
    <module>chat-room-server</module>
</modules>
<description>这是聊天室的父工程</description>

聊天室服务端程序:

package com.single.chat.room.server;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
 * 聊天室服务端程序
 * Author:kangfan
 * Created:2019.3.30
 */
public class SingleServer {
    public static void main(String[] args) throws IOException {
       try { //1.创建ServerSocket
           ServerSocket serverSocket = new ServerSocket(7777);

           //2.等待客户端连接
           System.out.println("等待客户端连接...");
           Socket clientSocket=serverSocket.accept();
           System.out.println("客户端信息:"+clientSocket.getRemoteSocketAddress());

           //3.接受和发送数据
           //3.1接受
           InputStream clientInput=clientSocket.getInputStream();
           Scanner scanner=new Scanner(clientInput);
           String clientDate=scanner.next();
           System.out.println("来自客户端的消息:"+clientDate);
           //3.2发送
           OutputStream clientOutput=clientSocket.getOutputStream();
           OutputStreamWriter writer=new OutputStreamWriter(clientOutput);
           writer.write("你好,欢迎连接服务器!\n");
           writer.flush();
       }catch(IOException e){
           e.printStackTrace();
       }
    }
}

聊天室客户端程序:

package com.single.chat.room.client;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

/**
 * 聊天室的客户端程序
 * Author:kangfan
 * Created:2019.3.30
 */
public class SingleClient {
    public static void main(String[] args) {
        try {
            //1.创建客户端,连接到服务器
            Socket clientSocket=new Socket("127.0.0.1",7777);

            //2.发送数据,接收数据
            //2.1发送数据
            OutputStream clientOutput= clientSocket.getOutputStream();
            OutputStreamWriter writer=new OutputStreamWriter(clientOutput);
            writer.write("你好,我是客户端!\n");
            writer.flush();

            //2.2接收数据
            InputStream clientInput=clientSocket.getInputStream();
            Scanner scanner=new Scanner(clientInput);
            String serverData = scanner.next();
            System.out.println("来自服务端的数据:"+serverData);

            //客户端关闭
            clientInput.close();
            clientOutput.close();
            clientSocket.close();
            System.out.println("客户端关闭");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

配置项目

<!--配置项目属性-->
    <properties>
            <encoding>UTF-8</encoding>
            <java.version>1.8</java.version>
            <maven.compiler.target>${java.version}</maven.compiler.target>
            <maven.compiler.source>${java.version}</maven.compiler.source>
    </properties>

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值