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();
        
    }

}

 

posted @ 2020-05-08 16:43  后来者。  阅读(427)  评论(0编辑  收藏  举报