客户端与服务端通信的原理
代码实现
客户端代码
package demo2;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception, IOException {
//通过socket对象向服务器发送请求
Socket socket=new Socket("localhost",2198);
//创建的socket对象是计算机客户端通讯的端点
//该通讯的端点用于和服务器通讯
InputStream is=socket.getInputStream();
OutputStream os=socket.getOutputStream();
//通过输出流将数据发送到通讯的另一端
os.write("你好".getBytes());
while(true){
if(is.available()>0){
byte[] b=new byte[is.available()];
is.read(b);
System.out.println("服务端回复说"+new String(b));
}
}
}
}
服务器代码
package demo2;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException{
//创建服务器容器对象,需要监听计算机中的某一个接口
ServerSocket server=new ServerSocket(2198);
//执行accept方法等待客户端连接,该方法是线程阻塞的
//如果没有客户端发送请求,该方法会阻塞当前线程
//如果有客户端发送了请求,该方法会进入执行状态并返回一个Socket对象
//该Socket对象只能用于和发送请求这一客户端进行通讯
Socket socket=server.accept();
System.out.println("有客户端连接请求到服务器");
//取出输入流
InputStream is=socket.getInputStream();
OutputStream os=socket.getOutputStream();
//接受数据使用死循环来处理
while(true){
if(is.available()>0){
byte[] b=new byte[is.available()];
is.read(b);
System.out.println("客户端说"+new String(b));
//回复客户端
os.write("你也好".getBytes());
}
}
}
}