刚刚整理了udp的,现在整理一下tcp的
写博客的流程一直是:
(背景----->)要实现的功能----->要做的事情----->代码以及结果(----->感触)
下面要实现的功能是:实现客户端与服务端的tcp通信
要做的事情:
服务端
创建ServerSocket对象,并绑定端口<-----new ServerSocket(8090);//参数是端口号
监听连接请求,并返回套接字Socket对象<-----serverSocket.accept();//该方法返回Socket 对象
获取输入输出流的对象,发送接收数据
<-----new BufferedReader(new InputStreamReader(socket.getInputStream()));//socket是上面一步返回的对象
<-----new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
<-----readLine().toString();//利用上面获得的对象调用读取输出的方法
<-----write(string);//参数是要发送的对象
关闭套接字对象<-----close()
客户端
创建Socket对象,并绑定端口<-----new Socket("172.16.17.37", 8090);
获取输入输出流的对象,发送接收数据
<-----new BufferedReader(new InputStreamReader(socket.getInputStream()));//socket是上面一步返回的对象
<-----new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
<-----readLine().toString();//利用上面获得的对象调用读取输出的方法
<-----write(string);//参数是要发送的对象
关闭套接字对象<-----close()
代码:
下面需要注意的一点,System.getProperty("line.separator")是java的标准换行符,也就是说换成\n也是可以的,但是不加上换行符就会接收不到信息,原因就在惹readLine()这里,他必须要读取到结束符才会返回,否则一直在读取
客户端代码
try {
Socket socket = new Socket("172.16.17.37", 8090);
//调用套接字的方法获取输出和输入流的对象,并开始网络数据的发送和接收
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//发送和接收信息
String string = "客户端-------->服务器端" + System.getProperty("line.separator");
writer.write(string);
writer.flush();
System.out.println("发送数据是:" + string);
String string2 = reader.readLine() + System.getProperty("line.separator");
System.out.println("接收数据是:" + string2);
//关闭套接字对象
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
服务端代码
ServerSocket serverSocket = null;
try {
//创建ServerSocket对象,并绑定在指定端口上
serverSocket = new ServerSocket(8090);
//调用accept,监听请求,如果客户端请求连接则接受,并返回socket对象
Socket socket = serverSocket.accept();
//调用socket类的相关方法获取输出和输入流的对象,开始网络的接收和发送
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//将读取到的数据转化为字符串,并显示出来
String string = reader.readLine().toString();
System.out.println("我收到的东西是:" + string);
//发送字符串给客户端
String string2 = "服务器端------>客户端" + System.getProperty("line.separator");
writer.write(string2);
writer.flush();
System.out.println("发送数据是:" + string2);
//关闭套接字对象
socket.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(serverSocket != null){
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果