TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。
Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信Java为客户端提供了Socket类,为服务器端提供了ServerSocket类。
发送数据的步骤
①
创建客户端的
Socket
对象
(Socket)
②
获取输出流,写数据
③
释放资源
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket s=new Socket("202.199.6.226",12345); //建立连接的socket
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//写数据流
String line;
while((line=br.readLine())!=null){
if("886".equals(line))
break;
bw.write(line);
bw.newLine();
bw.flush();
break;
}
s.shutdownOutput();//告诉服务器,上传结束
//s.shutdownInput();
BufferedReader br2=new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br2.readLine());
// OutputStream out=s.getOutputStream();
// out.write("tcp hello".getBytes());
// InputStream in=s.getInputStream();
// byte[] bys=new byte[1024];
// int len=in.read(bys);
// String data=new String(bys,0,len);
// System.out.println(data);
s.close();//释放资源
}
}
接收数据的步骤
①
创建服务器端的
Socket
对象
(
ServerSocket
)
②
获取输入流,读数据,并把数据显示在控制台
③
释放资源
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket(12345); //建立帮助连接的socket
Socket s=ss.accept(); //接收连接中传过来的socket
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//打开读取数据流
String line;
while((line=br.readLine())!=null){
System.out.println(line);
}
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write("上传成功");//像客户端反馈
bw.close();
// InputStream is=s.getInputStream();
// byte[] bys=new byte[1024];
// int len=is.read(bys);
// String data=new String(bys,0,len);
// System.out.println("fuwuqi-- "+data);
// OutputStream os=s.getOutputStream();
// os.write("正常连接".getBytes());
// s.close();
ss.close();
}
}