Java中的Socket函数及其用法
Java提供了Socket类和ServerSocket类来实现网络编程。Socket是一个和网络中的通信端点有关的类。在网络中,每个主机有一个IP地址和一个端口号,如果两个主机之间要进行通信,就需要建立一条连接,通信的两端就是一个套接字或Socket。Socket可以用来建立不同层次的协议,如TCP、UDP等。Java中的Socket类和ServerSocket类可以使用TCP协议来建立连接和传输数据。
Socket类的用法:
1. 创建Socket对象:Socket socket = new Socket(String host, int port)
2. 获取输入流和输出流:
- 输入流:socket.getInputStream()
- 输出流:socket.getOutputStream()
3. 传输数据:
- 发送数据:OutputStream.write(byte[] b), OutputStream.write(int b)
- 接收数据:InputStream.read(byte[] b), InputStream.read()
4. 关闭socket:socket.close()
ServerSocket类的用法:
1. 创建ServerSocket对象:ServerSocket ss = new ServerSocket(int port)
2. 等待客户端连接:Socket socket = ss.accept()
3. 获取输入流和输出流:
- 输入流:socket.getInputStream()
- 输出流:socket.getOutputStream()
4. 传输数据:
- 发送数据:OutputStream.write(byte[] b), OutputStream.write(int b)
- 接收数据:InputStream.read(byte[] b), InputStream.read()
5. 关闭socket:socket.close()
6. 关闭ServerSocket:ss.close()
Socket程序示例:
客户端程序:
import java.net.*;
import java.io.*;
public class MyClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1", 8888);
OutputStream os = socket.getOutputStream();
os.write("Hello World".getBytes());
InputStream is = socket.getInputStream();
byte[] buffer = new byte[1024];
int len;
len = is.read(buffer);
System.out.println("接收到服务器的响应:" + new String(buffer, 0, len));
is.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端程序:
import java.net.*;
import java.io.*;
public class MyServer {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
Socket socket = ss.accept();
InputStream is = socket.getInputStream();
byte[] buffer = new byte[1024];
int len;
len = is.read(buffer);
System.out.println("接收到客户端的数据:" + new String(buffer, 0, len));
OutputStream os = socket.getOutputStream();
os.write("OK".getBytes());
os.close();
is.close();
socket.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
服务端输出:
接收到客户端的数据:Hello World
客户端输出:
接收到服务器的响应:OK
