TCP通信原理
1、TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路
2、一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
3、Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信
4、Java为客户端提供了Socket类。为服务器端提供了ServerSocket类
下面是我做的练习
在Client程序输入,在Service程序那接收并输出到控制台,当输出886时结束程序
Client类
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
Socket s=new Socket("192.168.1.1",1116);
// 虽然我比较习惯用Scanner但这次用标准输入流的方法来做键盘输入,为了能一行一行读封装成一个字符输入缓冲流
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
// 为了跟上面的相对应,把输出流也封装成字符输出缓冲流
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line=br.readLine())!=null){
// 上面把读入的一行赋值给line,当line是886时,先继续写,然后跳出循环
if(line.equals("886")){
bw.write(line);
bw.newLine();
bw.flush();
break;
// 如果不是886,只需要写入数据就可以了
}else{
bw.write(line);
bw.newLine();
bw.flush();
}
}
s.close();
}
}
Service类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
// 创建ServerSocket
ServerSocket ss=new ServerSocket(1116);
// ServerSocket对象没有getInputStream()方法,只能通过这个方法创建Socket对象再调用getInputStream方法
Socket s=ss.accept();
// 把输出流也包装成字符输出缓冲流
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
while((line=br.readLine())!=null){
// 如果接收的是886,输出到控制台再跳出循环
if(line.equals("886")){
System.out.println("接收的消息是:"+line);
break;
// 否则只需要把接收的数据输出到控制台
}else{
System.out.println("接收的消息是:"+line);
}
}
ss.close();
}
}
结果