今天学习了Socket,也就是套接字。查看了很多文档,Socket是用于服务端和客户端之间建立连接的。
Socket的含义是源ip地址和端口号,以及目标ip和端口号的组合,是用来标识客户端请求的服务器和服务。
举个栗子:
Client 客户端 写入数据
package com.demo2;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 客户端
*
* @author zhaoj
*
*/
public class Client {
public static void main(String[] args) {
try {
Socket client = new Socket("localhost", 1234);
String data = "hello socket";
// 写入数据
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write(data);
// 关闭资源
writer.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Server 服务端 读出数据
package com.demo2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端
* @author zhaoj
*
*/
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(1234);
// 调用accept方法监听并获取客户端的请求socket
// accept方法是一个阻塞方法,在服务器端与客户端之间建立联系之前会一直等待阻塞
Socket socket = server.accept();
// 读出数据
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
while((s = reader.readLine()) != null){
System.out.println(s);
}
// 关闭
reader.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
启动的时候要先启动服务端,再启动客户端
最终服务端输出 hello socket