Socket和ServerSocket类是Java实现流式Socket通信的主要工具。
- server端:创建ServerSocket对象在某端口提供监听服务,然后等待来自Client端的请求。
- client端:创建 Socket对象向Server的监听端口请求。
- server端:接收请求,返回用于通信的Socket。
- 双方通过Socket进行数据通信。
- 使用完毕后,关闭socket,ServerSocket
下面是一个最简单的传输文件的例子:
- server端:
public class SocksTestWriteUTF {
public static void main(String[] args) throws IOException{
ServerSocket serverSocket = new ServerSocket(8192); //新建一个ServerSocket,监听8192端口,如果参数是0,表示选择一个可用的端口。serverSocket.getLocalPort()可以获得使用的端口。
Socket socket = serverSocket.accept(); //阻塞方法,当有Socket连接到这个监听的端口上时,返回一个socket实例,接下来通过这个socket与对端通信。
DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("/home/lvlv/movie.rmvb");
int c = 0;
byte[] buf = new byte[8192];
while( ( c= dis.read(buf) ) != -1)
{
dos.write(buf,0,c);
}
dis.close();
dos.close();
socket.close();
serverSocket.close();
}
}
- client端:
public class SocksTest {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("192.168.1.106", 8192);
File f = new File("D:\\movie.rmvb");
DataInputStream dis = new DataInputStream(new BufferedInputStream(
new FileInputStream(f)));
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(
socket.getOutputStream()));
int c;
byte[] buf = new byte[8192];
while ((c = dis.read(buf)) != -1) {
dos.write(buf, 0, c);
}
dos.flush();
dos.close();
socket.close();
}
}
先运行server端,然后运行client端。