JAVA客户端&服务器的socket通信
socket是两台主机之间的一个连接通道,它可以完成七个基本操作:
- 发送远程机器
- 发送数据
- 接收数据
- 关闭连接
- 绑定端口
- 监听入站数据
- 再绑定端口上接收来自远程机器的连接
在客户端上使用socket
- 程序用构造函数创建一个新的socket
- socket尝试连接远程服务器
用socket从服务器读取
Socket socket = new Socket("http://www.baidu.com",13);
创建一个连接,如果连接超时,或者服务器未在端口上,那么就设置一个超时时间,超时时间按照毫秒值度量
socket.setSoTimeout(15000); //设置socket在15秒无响应后超时
sever socket就是服务端用来检测客户端是否使用socket发起请求了,如果有,就从中拿到客户端的请求数据,再将响应数据写入socket,这其中写入数据设计I/O流操作
基本的客户端和服务器之间的socket通信
客户端:
package com.example.socketdome.javasocket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
Socket socket;
{
try {
//创建socket通道,传入IP地址和服务器的端口号
socket = new Socket(InetAddress.getLocalHost(),2121);
//通过print writer发送数据给服务器,bufferedreader读取数据
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//发送数据
String request ="你收到我的消息了吗?";
//写入数据
printWriter.println(request);
//发送
printWriter.flush();
//接收服务器的响应数据
String respose =bufferedReader.readLine();
System.out.println("服务器:"+respose);
//关闭资源
socket.close();
bufferedReader.close();
printWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器:
package com.example.socketdome.javasocket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
//创建服务器对象,传入端口
ServerSocket serverSocket = new ServerSocket(2121);
//新建socket对象,等待客户端连接,调用socket的accept方法监听客户端的请求,该方法是阻塞方法,就在这等着
Socket socket =serverSocket.accept();
//创建Bufferdreader,接收客户端的信息,数据流对象就是socket
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//读取客户端的请求信息
String requestData = bufferedReader.readLine();
System.out.println("客户端:"+requestData);
//创建Printwriter发送服务器响应信息,接受的数据流也来自socket
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
//写入响应数据
printWriter.println("收到了,老铁");
//发送信息
printWriter.flush();
//关闭资源
bufferedReader.close();
socket.close();
printWriter.close();
serverSocket.close();
}
}
运行结果
客户端:
服务器: