Java教程

Java Socket编程

Java Socket编程用于在不同JRE上运行的应用程序之间的通信。
Java Socket编程可以是面向连接的或连接的-less。
Socket和ServerSocket类用于面向连接的Socket编程,DatagramSocket和DatagramPacket类用于无连接Socket编程。
Socket编程的客户端必须知道两条信息:
服务器的IP地址 端口号。
在这里,我们将进行单向客户端和服务器通信。在此应用程序中,客户端将消息发送到服务器,服务器读取消息并打印。在这里,使用了两个类: Socket和ServerSocket。 Socket类用于通信客户端和服务器。通过此类,我们可以读写消息。 ServerSocket类在服务器端使用。 ServerSocket类的accept()方法将阻止控制台,直到客户端连接为止。客户端成功连接后,它将在服务器端返回Socket实例。
Java中的Socket编程

套接字类

套接字只是机器之间通信的端点。 Socket类可用于创建套接字。

重要方法

方法 说明
1)public InputStream getInputStream() 返回与此套接字连接的InputStream。
2)public OutputStream getOutputStream() 返回与此套接字连接的OutputStream。
3)public synchronized void close() 关闭此套接字

ServerSocket类

ServerSocket类可用于创建服务器套接字。此对象用于与客户端建立通信。

重要方法

方法 说明
1)public Socket accept() 返回套接字并在服务器和客户端之间建立连接。
2)public synchronized void close() 关闭服务器套接字。

JavaSocket编程示例

创建服务器:
要创建服务器应用程序,我们需要创建ServerSocket类的实例。在这里,我们使用6666端口号进行客户端和服务器之间的通信。您也可以选择其他任何端口号。 accept()方法等待客户端。如果客户端使用给定的端口号进行连接,则它将返回Socket的实例。
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();
//establishes connection and waits for the client
创建客户端:
要创建客户端应用程序,我们需要创建Socket类的实例。在这里,我们需要传递服务器的IP地址或主机名以及端口号。在这里,我们使用" localhost",因为我们的服务器在同一系统上运行。
Socket s=new Socket("localhost",6666);
让我们看一个简单的JavaSocket编程,其中客户端发送文本,服务器接收并打印文本。
文件: MyServer.java
import java.io.*;
import java.net.*;
public class MyServer {
    public static void main(String[] args){
        try{
            ServerSocket ss=new ServerSocket(6666);
            Socket s=ss.accept();
            //establishes connection DataInputStream dis=new DataInputStream(s.getInputStream());
            String str=(String)dis.readUTF();
            System.out.println("message= "+str);
            ss.close();
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}
文件: MyClient.java
import java.io.*;
import java.net.*;
public class MyClient {
    public static void main(String[] args) {
        try{
            Socket s=new Socket("localhost",6666);
            DataOutputStream dout=new DataOutputStream(s.getOutputStream());
            dout.writeUTF("Hello Server");
            dout.flush();
            dout.close();
            s.close();
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}
要执行此程序,请打开两个命令提示符,并在每个命令提示符处执行每个程序,如下图所示。
运行客户端应用程序后,将在屏幕上显示一条消息。服务器控制台。
Java网络编程

JavaSocket编程示例(双方都进行读写)

在此示例中,客户端将首先向服务器写入内容,然后服务器将接收并打印文本。然后,服务器将写入客户端,客户端将接收并打印文本。步骤继续。
文件: MyServer.java
import java.net.*;
import java.io.*;
class MyServer{
    public static void main(String args[])throws Exception{
        ServerSocket ss=new ServerSocket(3333);
        Socket s=ss.accept();
        DataInputStream din=new DataInputStream(s.getInputStream());
        DataOutputStream dout=new DataOutputStream(s.getOutputStream());
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String str="",str2="";
        while(!str.equals("stop")){
            str=din.readUTF();
            System.out.println("client says: "+str);
            str2=br.readLine();
            dout.writeUTF(str2);
            dout.flush();
        }
        din.close();
        s.close();
        ss.close();
    }
}
文件: MyClient.java
import java.net.*;
import java.io.*;
class MyClient{
    public static void main(String args[])throws Exception{
        Socket s=new Socket("localhost",3333);
        DataInputStream din=new DataInputStream(s.getInputStream());
        DataOutputStream dout=new DataOutputStream(s.getOutputStream());
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String str="",str2="";
        while(!str.equals("stop")){
            str=br.readLine();
            dout.writeUTF(str);
            dout.flush();
            str2=din.readUTF();
            System.out.println("Server says: "+str2);
        }
        dout.close();
        s.close();
    }
}
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4