java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

本文详细介绍了Socket编程的基本概念,包括Socket类和ServerSocket类的主要构造方法和常用方法,如连接、发送和接收数据等。同时提供了单一服务器处理多个客户端连接的具体实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Socket类
Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程地址上的指定远程端口。
Socket(String host, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口。

close()
关闭此套接字。
connect(SocketAddress endpoint)
将此套接字连接到服务器。
connect(SocketAddress endpoint, int timeout)
将此套接字连接到服务器,并指定一个超时值。
getInetAddress()
返回套接字连接的地址。
getInputStream()
返回此套接字的输入流。
getLocalPort()
返回此套接字绑定到的本地端口。
getOutputStream()
返回此套接字的输出流。
getPort()
返回此套接字连接到的远程端口。


ServerSocket类
ServerSocket(int port)
创建绑定到特定端口的服务器套接字。
accept()
侦听并接受到此套接字的连接。
getInetAddress()
返回此服务器套接字的本地地址。

Socket编程步骤
服务器端创建ServerSocket对象,调用accept方法返回Socket对象
客户端创建Socket对象,通过端口连接到服务器
客户端、服务器端都使用Socket中的getInputStream方法和getOutputStream方法获得输入流和输出流,进一步进行数据读写操作

(InetAddress用来描述主机地址;
Socket用来创建两台主机之间的连接;
ServerSocket用来侦听来自客户端的请求;
Socket通常称作“套接字”,通常通过“套接字”向网络发出请求或者应答网络请求。)

 

单一服务器对多客户端
服务端:每次连接成功一个客户端,则启动一个线程为其服务

public class Server {
  public static void main(String[] args) throws IOException {
    ServerSocket ss = new ServerSocket(10086);
    System.out.println("服务器正常启动。。。");
    while(true){
      Socket socket = ss.accept();
      System.out.println("用户接入成功。。。");
      new ServerThread(socket).start();
    }
  }
}

 

单一服务器对多客户端

客户端:

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.io.OutputStreamWriter;
 5 import java.io.PrintWriter;
 6 import java.net.InetAddress;
 7 import java.net.Socket;
 8 import java.net.UnknownHostException;
 9 import java.util.Scanner;
10 
11 
12 public class Client {
13     private static PrintWriter pw=null;
14     private static BufferedReader br=null;
15     private static Socket s;
16     static Scanner scanner=new Scanner(System.in);
17     /**
18      * @param args
19      */
20     public static void main(String[] args) {
21         // TODO Auto-generated method stub
22         try {
23             Socket s=new Socket(InetAddress.getLocalHost(),5500);
24             pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
25             br=new BufferedReader(new InputStreamReader(s.getInputStream()));
26             while(true){
27                 System.out.println("Client端请输入:");
28                 String str = scanner.next();
29                 pw.println(str);
30                 pw.flush();
31                 String string=br.readLine();
32                 System.out.println("Client读到:"+string);
33                 if(str.equals("exit")){
34                     break;
35                 }
36             } 
37         }catch (Exception e) {
38                 // TODO Auto-generated catch block
39                 e.printStackTrace();
40         }
41         try {
42             br.close();
43             pw.close();
44         } catch (IOException e1) {
45                 // TODO Auto-generated catch block
46                 e1.printStackTrace();
47         }
48     }
49 }

 

服务端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;


public class Server {
    private static BufferedReader br=null;
    private static PrintWriter pw=null;
    private static ServerSocket ss;
    private static Socket s;
    static Scanner scanner=new Scanner(System.in);
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            ss=new ServerSocket(5500);
            System.out.println("服务器正常启动。。。。");
            s=ss.accept();//阻塞方法
            System.out.println("连接成功"+s.getRemoteSocketAddress());
            br=new BufferedReader(new InputStreamReader(s.getInputStream()));
            pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
            while(true){
                String string=br.readLine();
                System.out.println("Server读到:"+string);
                System.out.println("Server端请输入:");
                String str=scanner.next();
                pw.println(str);
                pw.flush();
                if(str.equals("exit")){
                    break;
                }
            }
        } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
        }
        try {
            pw.close();
            br.close();
        } catch (IOException e1) {
                // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

}

 

转载于:https://www.cnblogs.com/-maji/p/7225640.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值