java 网络编程(三)

时间:2022-04-09 16:17:15

博主 qq 656358805,欢迎在线交流!

下面我们接着学习基于tcp协议的通信:

Socket通信:tcp协议,面向连接的特点,所以要确定连接,游览器也是一个基于tcp的客户端。

 

核心:请求与相应。

 

所用类:Socket编程

 

服务器:ServerSocket

客户端:Socket 客户端不同于udp,不用指定端口号,客户端的端口号是系统内部自动分配的,然而Socket的对象不是一个计算机模型,而是抽象成一条管道!

 

服务器搭建:

1、创建服务器。

2、开始时刻接受客户端请求。

3、接收成功后发送成功提示给用户。

public class Server

{

public static void main(String[]args) throws IOException

{

//1、创建SocketServer类,创建服务端

ServerSocket myserver=new ServerSocket(6666);

//2、阻塞式接受客户端请求,注意之所以是阻塞式是因为accept返回Socket类,若接收不到客户端则一直等待下去,不能执行下面程序

Socket myuser=myserver.accept();

//注意上一行代码!!!服务端的accept接收了客户端的类,这个类用于主体操作。

System.out.println("接收到一个客户端");

//3、发送数据给用户表示连接成功。

String returnm="欢迎使用";

BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(myuser.getOutputStream()));

writer.write(returnm);

writer.newLine();

//此处调用的newLine()方法是为了增加一个结束符,从而使客户端的readline()运行正常

writer.flush();

//writer.close();

}

}

 

客户端搭建:

1、创建客户端

2、接收服务器返回的数据。

public class Client

{

public static void main(String[]args) throws UnknownHostException, IOException

{

//1、创建客户端Socket

Socket user=new Socket("localhost",6666);

//2、接受服务器返回的数据

BufferedReader reader=new BufferedReader(new InputStreamReader(user.getInputStream()));

String read=reader.readLine();

System.out.println(read);

}

}

 

也可以用另一种流处理方式,代码如下不细讲了。

服务端:

DataOutputStream writer=new DataOutputStream(myuser.getOutputStream());

writer.writeUTF(returnm);

writer.flush();

客户端:

DataInputStream reader=new DataInputStream(user.getInputStream());

String read=reader.readUTF();

System.out.println(read);