本文概述
- 插座类
- ServerSocket类
- Java套接字编程示例
- Java套接字编程示例(双方读写)
Java套接字编程可以是面向连接的或无连接的。
Socket和ServerSocket类用于面向连接的套接字编程, DatagramSocket和DatagramPacket类用于无连接套接字编程。
套接字编程中的客户端必须知道两个信息:
- 服务器的IP地址, 以及
- 端口号。
文章图片
插座类 【Java套接字编程】套接字只是机器之间通信的端点。 Socket类可用于创建套接字。
重要方法
方法 | 描述 |
---|---|
1)公共InputStream getInputStream() | 返回与此套接字连接的InputStream。 |
2)公共OutputStream getOutputStream() | 返回与此套接字连接的OutputStream。 |
3)公共同步void close() | 关闭这个插座 |
重要方法
方法 | 描述 |
---|---|
1)公共套接字accept() | 返回套接字, 并在服务器和客户端之间建立连接。 |
2)公共同步无效close() | 关闭服务器套接字。 |
要创建服务器应用程序, 我们需要创建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);
让我们看一个简单的Java套接字编程, 其中客户端发送文本, 服务器接收并打印文本。
文件: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套接字编程示例(双方读写) 在此示例中, 客户端将首先写入服务器, 然后服务器将接收并打印文本。然后服务器将写到客户端, 客户端将接收并打印文本。步骤继续。
文件: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();
}}
推荐阅读
- Java静态嵌套类
- Java中的ResourceBundle类
- Applet中的参数
- 小程序中的绘画
- newInstance()方法
- 10大Docker替代品(最佳容器虚拟化软件推荐)
- 10个最佳Wunderlist替代品(任务管理工具推荐合集)
- Windows和Mac的15种最佳vMix替代品(文稿演示软件推荐)
- 编辑视频的10大最佳Avidemux替代品(常用视频编辑软件推荐)