Java中的套接字Socket编程

作者: Arvin Chen 分类: Java 发布时间: 2018-10-23 22:22

本文介绍了一种非常基本的单向客户端和服务器设置,其中客户端连接,向服务器发送消息,服务器使用Socket套接字连接显示它们。有很多低级的东西需要发生才能使这些东西工作,但Java API网络包(java.net)负责所有这些,使程序员的网络编程变得非常容易。

Socket套接字客户端编程

建立Socket套接字连接

要连接到其他机器,我们需要一个套接字连接。套接字连接意味着两台机器有关于彼此的网络位置(IP地址)和TCP端口的信息.java.net.Socket类表示一个Socket。打开套接字:

Socket socket = new Socket(“127.0.0.1”, 5000)
  • 第一个参数 -  服务器的IP地址。(127.0.0.1是localhost的IP地址,其中代码将在单个独立计算机上运行)。
  • 第二个参数 -  TCP端口。(只是表示在服务器上运行的应用程序的数字。例如,HTTP在端口80上运行。端口号可以是0到65535)

通讯

要通过套接字连接进行通信,流用于输入和输出数据。

关闭连接

一旦发送到服务器的消息,就会显式关闭套接字连接。

在程序中,客户端不断读取用户的输入并发送到服务器,直到键入“Over”。

Java实现

// A Java program for a Client 
import java.net.*; 
import java.io.*; 
  
public class Client 
{ 
    // initialize socket and input output streams 
    private Socket socket            = null; 
    private DataInputStream  input   = null; 
    private DataOutputStream out     = null; 
  
    // constructor to put ip address and port 
    public Client(String address, int port) 
    { 
        // establish a connection 
        try
        { 
            socket = new Socket(address, port); 
            System.out.println("Connected"); 
  
            // takes input from terminal 
            input  = new DataInputStream(System.in); 
  
            // sends output to the socket 
            out    = new DataOutputStream(socket.getOutputStream()); 
        } 
        catch(UnknownHostException u) 
        { 
            System.out.println(u); 
        } 
        catch(IOException i) 
        { 
            System.out.println(i); 
        } 
  
        // string to read message from input 
        String line = ""; 
  
        // keep reading until "Over" is input 
        while (!line.equals("Over")) 
        { 
            try
            { 
                line = input.readLine(); 
                out.writeUTF(line); 
            } 
            catch(IOException i) 
            { 
                System.out.println(i); 
            } 
        } 
  
        // close the connection 
        try
        { 
            input.close(); 
            out.close(); 
            socket.close(); 
        } 
        catch(IOException i) 
        { 
            System.out.println(i); 
        } 
    } 
  
    public static void main(String args[]) 
    { 
        Client client = new Client("127.0.0.1", 5000); 
    } 
} 

Socket套接字服务器编程

建立Socket套接字连接

要编写服务器应用程序,需要两个套接字。

  • 等待客户端请求的ServerSocket(当客户端创建新的Socket()时)
  • 用于与客户端通信的普通旧Socket套接字。

通讯

getOutputStream()方法用于通过Socket套接字发送输出。

关闭连接

完成后,通过关闭套接字以及输入/输出流来关闭连接非常重要。

// A Java program for a Server
import java.net.*;
import java.io.*;
 
public class Server
{
    //initialize socket and input stream
    private Socket          socket   = null;
    private ServerSocket    server   = null;
    private DataInputStream in       =  null;
 
    // constructor with port
    public Server(int port)
    {
        // starts server and waits for a connection
        try
        {
            server = new ServerSocket(port);
            System.out.println("Server started");
 
            System.out.println("Waiting for a client ...");
 
            socket = server.accept();
            System.out.println("Client accepted");
 
            // takes input from the client socket
            in = new DataInputStream(
                new BufferedInputStream(socket.getInputStream())); 
 
            String line = "";
 
            // reads message from client until "Over" is sent
            while (!line.equals("Over"))
            {
                try
                {
                    line = in.readUTF();
                    System.out.println(line);
 
                }
                catch(IOException i)
                {
                    System.out.println(i);
                }
            }
            System.out.println("Closing connection");
 
            // close connection
            socket.close();
            in.close();
        }
        catch(IOException i)
        {
            System.out.println(i);
        }
    }
 
    public static void main(String args[])
    {
        Server server = new Server(5000);
    }
}

重点

  • 服务器应用程序在特定端口5000上创建一个ServerSocket。这启动我们的服务器侦听进入端口5000的客户端请求。
  • 然后,Server创建一个新的Socket以与客户端通信。
socket = server.accept()
  • accept()方法阻塞(只是坐在那里),直到客户端连接到服务器。
  • 然后我们使用getInputStream()方法从套接字获取输入。我们的服务器不断接收消息,直到客户端发送“Over”。
  • 在我们完成之后,我们通过关闭套接字和输入流来关闭连接。
  • 要在计算机上运行客户端和服务器应用程序,请编译它们。然后首先运行服务器应用程序,然后运行客户端应用程序。

在终端或命令提示符上运行

为Server打开两个窗口,为Client打开另一个窗口

1.首先运行Server应用程序,

$ java Server

Server started
Waiting for a client …

2.然后在另一个终端上运行客户端应用程序,

$ java Client

它将显示 - 已连接且服务器接受客户端并显示,

客户接受

3.然后,您可以在“客户端”窗口中开始键入消息。以下是客户端的示例输入

Hello
I made my first socket connection
Over

服务器同时接收和显示的内容,

Hello
I made my first socket connection
Over
Closing connection

请注意,发送“Over”会关闭客户端和服务器之间的连接,就像之前所说的那样。

如果你正在使用Eclipse,则用下面的步骤:

  1.  在两个不同的终端或选项卡上编译它们
  2.  首先运行Server程序
  3.  然后运行客户端程序
  4.  在客户端窗口中键入消息,将同时由服务器窗口接收和显示。
  5.  输入结束。
  •   本文标题:Java中的套接字Socket编程 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/6602.html
    扫描二维码添加微信 
  • ,领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘优惠券!添加微信后,分享淘宝选中的机械键盘给淘宝机器人即可领取!
    支持我们,就用微信淘宝!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注

    更多阅读