zoukankan      html  css  js  c++  java
  • 【聊天室2】实现C/S架构聊天实现

    一、实现客户端和服务器端的聊天

    我们先来看一下socket的源码

    我们在代码定义的socket如下

     socket=new Socket(serverIP,port);

    源码为

     public Socket(InetAddress address, int port) throws IOException {
            this(address != null ? new InetSocketAddress(address, port) : null,
                 (SocketAddress) null, true);
        }
    private InetSocketAddressHolder(String hostname, InetAddress addr, int port) {
                this.hostname = hostname;
                this.addr = addr;
                this.port = port;
            }

    客户端向服务器端发送hello world

    我们都知道Tcp/ip协议组的四元组就是(源ip 源端口,目的ip 目的端口)

    在我们这里只用到了源ip和源端口

    客户端代码

    package com.lei;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class ClientDemo01 {
        public static void main(String[] args) throws IOException {
           // InetAddress serverIP=InetAddress.getByName("127.0.0.1");
            InetAddress serverIP=null;
            int port;
            Socket socket=null;
            OutputStream os=null;
            try {
                //本机ip
                serverIP=InetAddress.getByName("127.0.0.1");
                //设置交互端口号
                port=9999;
                //设置套接字
                socket=new Socket(serverIP,port);
                //输出流
                os=socket.getOutputStream();
                //写下hello world
                os.write("hello world".getBytes());
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            finally {
                //关闭资源 从下到上
                os.close();
                socket.close();
    
    
            }
        }
    }

    服务端代码

    package com.lei;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServeDemo02 {
    
    
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket=null;
            Socket socket=null;
            InputStream is=null;
            ByteArrayOutputStream baos=null;
            int port=9999;
            try {
                //该类实现了将数据写入字节数组的输出流
                baos=new ByteArrayOutputStream();
                //类实现了服务器套接字。 服务器套接字等待通过网络进入的请求。 它根据该请求执行一些操作,然后可能将结果返回给请求者
                serverSocket=new ServerSocket(9999);
                //侦听要连接到此套接字并接受它。   侦听到了我们在服务端定义的socket
                socket=serverSocket.accept();
                //输出流
                is=socket.getInputStream();
                byte[] buffer=new byte[1024];
                int len;
                while((len=is.read(buffer))!=-1){
                    baos.write(buffer,0,len);
                }
                System.out.println(baos.toString());
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            finally {
                //关闭资源 从下到上
                baos.close();
                is.close();
                socket.close();
                serverSocket.close();
            }
        }
    }

    要注意在运行的时候一定运行服务器端代码 然后马上运行客户端代码

    否则会出现连接失败的情况。

  • 相关阅读:
    基于Entity Framework的自定义分页,增删改的通用实现
    基于Dapper的分页实现,支持筛选,排序,结果集总数,多表查询,非存储过程
    让Windows 7变成WIFI热点
    composer update 总是出错解决方法
    yarn install 总是提示 waiting 解决办法
    eclipse 启动错误 : org.eclipse.jdt.internal.ui.javaeditor.ASTProvider$ActivationListener 解决
    gulp wxml gulp-htmlmin input不闭合的问题临时解决
    vscode+xdebug+cli 带参数配置
    vscode+php+xdebug Time-out connecting to client (Waited: 200 ms)
    vscode+php+xdebug won't stop at breakpoint 断点不起作用
  • 原文地址:https://www.cnblogs.com/cckong/p/14130293.html
Copyright © 2011-2022 走看看