Java Socket
精华
小牛编辑
114浏览
2023-03-14
1 什么是Java Socket编程
Java Socket编程用于在不同JRE上运行的应用程序之间的通信。
Java Socket编程可以是面向连接的或无连接的。
Socket和ServerSocket类用于面向连接的Socket编程,DatagramSocket和DatagramPacket类用于无连接Socket编程。
Socket编程中的客户端必须知道两个信息:
- 服务短的IP地址
- 服务端端口号
要完成Socket编程,我们需要使用两个类:Socket和ServerSocket。
Socket类:用于通信客户端和服务器。通过此类,我们可以读写消息。
ServerSocket类:在服务器端使用。ServerSocket类的accept() 方法将阻止控制台,直到客户端连接为止。客户端成功连接后,它将在服务器端返回Socket的实例。
2 Java Socket类
Socket只是机器之间通信的端点。Socket类可用于创建Socket。
2.1 Java Socket类的方法
方法 | 描述 |
---|---|
public InputStream getInputStream() | 返回与Socket连接的InputStream。 |
public OutputStream getOutputStream() | 返回与Socket连接的OutputStream。 |
public synchronized void close() | 关闭Socket |
3 Java ServerSocket类
ServerSocket类可用于创建服务端的Socket。该对象用于与客户端建立通信。
3.1 Java ServerSocket类的方法
方法 | 描述 |
---|---|
public Socket accept() | 返回Socket,并在服务器和客户端之间建立连接。 |
public synchronized void close() | 关闭ServerSocket。 |
4 Java Socket编程的例子
在此示例中,客户端将首先写入内容到服务器,然后服务器将接收并打印文本。然后服务器将输出内容到客户端,客户端将接收并打印文本。
4.1 服务端
MyServer.java:
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java Socket编程(服务端)
*/
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();
}
}
4.2 客户端
MyClient.java:
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java Socket编程(客户端)
*/
import java.net.*;
import java.io.*;
public 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();
}
}
4.3 效果演示
1)先启动服务端,再启动客户端
2)再客户端输入内容,然后按回车
3)切换到服务端界面,可以看到客户端传递的内容
4)接着,在服务端再输入内容,按回车
5)切换到客户端,也可以看到服务端传递过来的内容