zoukankan      html  css  js  c++  java
  • 使用 ServerSocket 建立聊天服务器-1

    1.代码目录

     2.ChatSocket.java

    -----------------------------------------------------------------------------------------------------------------------------

    package com.nantian.socket;

    import java.io.IOException;
    import java.net.Socket;

    public class ChatSocket extends Thread{
    //本地需要有一个socket对象,来接入传入的值
    Socket socket;
    /**
    * 创建构造方法
    */
    public ChatSocket(Socket s) {
    this.socket=s;
    }
    /**
    * 运行MyServerSocket类后,没有值输出后所写的方法
    * @param out
    */
    public void Out(String out) {
    try {
    socket.getOutputStream().write(out.getBytes("UTF-8"));
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    /**
    * 复写run方法,执行后台的功能
    */
    @Override
    public void run() {
    /*
    * //首先,对当前的socket实现数据的输出 //获取它的输出流 try { //BufferedWriter作为数据的输出,可以直接输出一行字符串了
    * BufferedWriter bw= new BufferedWriter( new OutputStreamWriter(
    * socket.getOutputStream())); //举例 int count=0; while (true) {
    * bw.write("loop"+count); //每一秒执行一次 sleep(1000); } } catch (IOException e) { //
    * TODO Auto-generated catch block e.printStackTrace(); } catch
    * (InterruptedException e) { // TODO Auto-generated catch block
    * e.printStackTrace(); }
    */
    //上面这段代码太复杂了导致输不出内容
    int count=0;
    while (true) {
    count++;
    Out("loop+"+count);
    //输出速度过快,每次输出后间隔500ms
    try {
    sleep(500);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }

    3.MyServerSocket.java

    -----------------------------------------------------------------------------------------------------------------------------------------

    package com.nantian.socket;
    //ctrl+shift+o删除多余的jar包
    public class MyServerSocket {

    public static void main(String[] args) {
    new ServerListener().start();
    }
    }

    4.ServerListener.java

    ----------------------------------------------------------------------------------------------------------------------------------------------

    package com.nantian.socket;

    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;

    import javax.swing.JOptionPane;

    public class ServerListener extends Thread{

    @Override
    public void run() {
    try {
    //port取值范围:1-65535(通常取值较大,这样可以和系统的分开)
    ServerSocket serverSocket=new ServerSocket(12345);
    //循环监听来自客户端的连接
    while(true) {
    //监听客户端的连接
    //accept()为一个阻塞的方法,会阻塞当前的线程
    //ServerSocket的accept()方法是侦听并接受到此套接字的连接,
    //就是一直等待连接,此方法在连接传入之前一直阻塞。直到接受到有socket的连接。
    //故创建ServerLIstener extends Thread
    Socket socket=serverSocket.accept();
    //建立连接
    JOptionPane.showMessageDialog(null, "有客户端连接到了本机的12345端口");
    //因为每一个Socket要与客户端独立的通信,所以socket需要另起一个线程
    //将socket传递给新的线程,用于socket通信,故创建ChatSocket extends Thread
    new ChatSocket(socket).start();//现在就可以循环监听客户端连接上的线程了
    }


    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }

    5.运行run as --> java application

    运行截图:

    ------------------------------------------------------------------------------------------------------

    cmd启动多个客户端,输入:telnet  localhost 12345,截图如下:

     ==================================================================================================================================

    以上代码只有对客户端发送数据的功能,并没有向客户端读取数据的功能.

    使用 ServerSocket 建立聊天服务器-2,实现向客户端读取数据的功能

  • 相关阅读:
    Android获取两条线之间的夹角度数
    Android字体度量(FontMetrics)
    Android下如何计算要显示的字符串所占的宽度和高度
    Android 颜色渲染PorterDuff及Xfermode详解
    从输入URL到页面加载的全过程
    滚动优化
    常用的前端相关chrome插件
    DNS预解析prefetch
    资源预加载preload和资源预读取prefetch简明学习
    使用chrome开发者工具中的performance面板解决性能瓶颈
  • 原文地址:https://www.cnblogs.com/curedfisher/p/11935941.html
Copyright © 2011-2022 走看看