博主 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);