创建服务端
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过输入流读取客户端发送的请求信息
④ 通过输出流向客户端发送乡音信息
⑤ 关闭相关资源
public class SocketServerTest {
public static void main(String[] args) throws Exception {
//创建线程池处理客户端请求
ExecutorService es = Executors.newFixedThreadPool(100);
ServerSocket server = new ServerSocket(8888);
Socket socket ;
//监听客户端请求
while((socket = server.accept())!= null){
es.execute(new ServerHandler(socket));
}
socket.close();
}
}
class ServerHandler implements Runnable{
private Socket socket;
public ServerHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String text = "";
while((text = reader.readLine())!=null){
System.out.println("收到客户端请求:"+text);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
① 创建Socket对象,指明需要连接的服务器的地址和端口号
② 连接建立后,通过输出流想服务器端发送请求信息
③ 通过输入流获取服务器响应的信息
④ 关闭响应资源
public class Client {
public static void main(String[] args) throws Exception {
try {
//连接至服务端
Socket socket = new Socket("127.0.0.1", 8888);
OutputStream out = socket.getOutputStream();
out.write(("客户端向服务端发送请求\r\n内容完毕!"+
Thread.currentThread().getName()
).getBytes());
socket.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Socket方法
getInetAddress(); 远程服务端的IP地址
getPort(); 远程服务端的端口
getLocalAddress() 本地客户端的IP地址
getLocalPort() 本地客户端的端口
getInputStream(); 获得输入流
getOutStream(); 获得输出流
值得注意的是,在这些方法里面,最重要的就是getInputStream()和getOutputStream()了。
Socket状态
isClosed(); //连接是否已关闭,若关闭,返回true;否则返回false
isConnect(); //如果曾经连接过,返回true;否则返回false
isBound(); //如果Socket已经与本地一个端口绑定,返回true;否则返回false