zoukankan      html  css  js  c++  java
  • socket 建立网络连接,client && server

    client代码:

    package socket;
    import java.io.IOException;
    import java.net.Socket;
    /**
     * 客户端_聊天室
     *
     * @author James(ZouZhaoPeng)
     */
    public class Client {
        /*
         * java.net.Socket套接字(连接网络的类,类似插座)
         * Socket封装了TCP协议的通讯细节,使用它就可以与服务器建议网路连接
         * 并且进行通讯,这里的通讯是两条流的读写完成与服务器端的数据交换
         */
        private Socket socket;
        /*
         * 客户端构造方法,用于初始化客户端
         */
        public Client() {
            try {
                /*
                 * 实例化socket时需要传入两个参数:
                 * 1.服务端的地址信息(IP)
                 * 2.服务器端打开的端口
                 * 
                 * 我们可以通过IP找到网路上的服务器计算机,通过端口号可以连接
                 * 服务端的应用程序。
                 */
                System.out.println("正在连接服务端....");
                socket = new Socket("localhost",8808);
                System.out.println("连接成功!");
                
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
        
        /**
         * 客户端开始工作的method
         */
        public void start() {
            
        }
        
        
        public static void main(String[] args) {
            Client client = new Client();
            client.start();
            
        }
    
    }

    server代码:

    package socket;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 服务器端_聊天室
     *
     * @author James(ZouZhaoPeng)
     */
    public class Server {
        /**
         * 服务端使用的是ServerSocket
         * 它有两个作用:
         * 1.向系统申请端口
         * 2.接受请求该端口的所有客户端的连接。
         */
        private ServerSocket server;
        
        
        /*
         * 服务端构造方法,用来初始化服务器
         */
        public Server() {
            try {
                /*
                 * 实例化的同时向系统申请端口号,客户端socket就是通过这个
                 * 端口与服务器建立连接的,如果该端口号被系统其它的程序占用
                 * 就会报错:java.net.BindException:address already in use:JVM_bind;
                 * 
                 * 出现该错误解决办法:
                 * 1.检查自己是否已经开启两次服务器,端口冲突
                 * 2.如果没有启动两次,表示有其他程序占用该端口了。
                 */
                
                System.out.println("正在启动服务器。。。");
                server = new ServerSocket(8808);
                System.out.println("服务器启动成功!");
            } catch (IOException e) {
                
                e.printStackTrace();
            }
        }
        
        
        /*
         * 服务器开始工作的方法
         */
        public void start() {
            
            try {
                
                /*
                 * ServerSocket提供的方法:
                 * Socket accept()
                 * 该方法是一个阻塞方法,调用该方法后,程序会一直卡住,此时开始等待
                 * 客户端client连接,一旦客户端实例化socket并且连接服务器这边申请的
                 * 端口时,accept方法会立即返回一个socket实例,此时等于和客户端
                 * 建立的连接,服务器通过返回的这个socket就可以和客户端进行交互了
                 * 
                 * 多次调用accept方法可以接收多个客户端的连接
                 */
                System.out.println("等待客户端连接。。。");
                Socket socket = server.accept();
                System.out.println("客户端连接成功。。。");
                
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        
        
        public static void main(String[] args) {
            
            Server server = new Server();
            server.start();
            
        }
    
    }
    如有错误,望费心指出。 感激涕零。
  • 相关阅读:
    索引
    IComparer 与 IComparable
    foreach
    修正needle在摘要认证时第二次请求仍返回401错误
    js笔记
    Ntp客户端
    c# 笔记
    android笔记
    nodejs笔记
    js 常用基本知识
  • 原文地址:https://www.cnblogs.com/zouxiaopq/p/12851418.html
Copyright © 2011-2022 走看看