4月5日TestServerSocket

于2017/4/5复习学习的java - Socket网络编程.

本次完成的是网络聊天编程功能(没有GUI).我想要实现多人在线聊天的功能呢,所以在ServerListener和ChatSocket类当中运用了多线程的技术extends Thread;

思路是首先得要一个ServerListener类(服务监听lei类)来进行以下的功能:
1.服务器端口的创建。(相当于对此端口进行监听)
2.接收客户端发送的请求。Socket socket = serverSocket.accept();
3.建立链接。
package com.wyt.main;

import java.net.ServerSocket;
import java.net.Socket;

public class ServerListener extends Thread
{
public void run()
{
try
{
//在12345端口建立网络服务套接字
ServerSocket serverSocket = new ServerSocket(12345);
//服务器一直打开一直接收客户端发送过来的请求
while(true)
{
Socket socket = serverSocket.accept();
System.out.println("端口链接成功");
//添加一个聊天客户端--->聊天客户端管理类里面
ChatSocket cs = new ChatSocket(socket);
cs.start();
ChatManager.getChatManager().add(cs);
}
}
catch(Exception e)
{

    }
}

}

然后我的思路是建立一个聊天的客户端类来封装聊天客户向服务器发送请求.所以里面有一个成员Socket socket来对应相应的客户。此ChatSocket类我想要实现以下的功能
1.读取客户所写的文字。
2.向所有其它的客户发送自己的消息。
package com.wyt.main;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;

public class ChatSocket extends Thread
{
Socket socket;

public ChatSocket(Socket s)
{
    this.socket = s;
}

//此方法运用IO流进行传输,从而实现聊天交流的功能
public void out(String out)
{
    try
    {
        socket.getOutputStream().write(out.getBytes("UTF-8"));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

public void run()
{
    try
    {
        BufferedReader br = new BufferedReader(
                new InputStreamReader(
                        socket.getInputStream(), "UTF-8"));
        String line = null;
        while((line = br.readLine())!= null)
        {
            ChatManager.getChatManager().publish(this,line);
        }
        br.close();
    }
    catch(Exception e)
    {
        
    }
}

}

由于想要实现的是多人在线聊天,所以预设有很多ChatSocket客户向ServerListener服务端口发送请求,为了便于其管理所以设计了ChatManager类.
此类设计特点:
由于管理的特殊性,所以只能有一个管理,即运用单例设计模式。构造函数私有化,在其类中用static final 提前创建一个ChatManager对象,想要取得该管理器使用getChatManager()来进行。 运用Vector<> ... = new Vector<>();来进行装载所有的ChatSokcet客户。
实现了以下功能:
1.接收发消息的客户端,并向其它客户发送此消息(ChatSocket cs , String out);
package com.wyt.main;

import java.util.Vector;

public class ChatManager
{
private ChatManager(){}
private static final ChatManager cm = new ChatManager();

public static ChatManager getChatManager()
{
    return cm;
}

Vector<ChatSocket> vector = new Vector<ChatSocket>();

public void add(ChatSocket cs)
{
    vector.add(cs);
}

public void publish(ChatSocket cs,String out)
{
    for(int i = 0; i<vector.size();i++)
    {
        ChatSocket cSocket = vector.get(i);
        if(!cSocket.equals(cs))
        {
            cSocket.out(out);
        }
    }
}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,665评论 19 139
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 5,235评论 1 114
  • 在外面等车其实是一种不平衡的状态下等车! 在家里等车,这个时候,还可以休息一下,可是,现在从家里坐车出来,在县城等...
    大荷08阅读 193评论 0 0
  • 1. 每当人们抬头仰望布满星子的夜幕时,总是会下意识地去寻找光芒最耀的那一颗;抑或是夜晚在沙漠、丛林、深山等错综复...
    杉遥阅读 567评论 0 1
  • 今天外出骑车看荷花,被大雨浇透了,内心依然喜悦,这就是我的最佳利益。
    零贰O2阅读 280评论 1 1

友情链接更多精彩内容