Advertisement

TCP通信发送和接收数据(Socket、ServerSocket)、TCP通信案例

阅读量:

目录

    • TCP

      • TCP发送接收数据
        • 发送数据
      • Socket
    • 接收数据

      • ServerSocket

      • TCP通信案例1

      • TCP接收数据后给出反馈案例2

      • TCP接收数据后给出反馈案例3

      • TCP接收数据后给出反馈案例4

TCP

概述:

  • TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
  • Java对基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信
  • Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
    互联网

TCP发送接收数据

发送数据
复制代码
创建客户端的Socket对象
    	Socket s=new Socket("host",port:12345);
    	Socket s=new Socket(InetAddress.getByName("host"),port:12345);
    2.获取输出流,写数据
    	OutputStream os=s.getOutputStream();
    3.释放资源
    	os.close();
    s.close();

Socket:实现客户端套接字。套接字是两台机器之间通信的端点

Socket
复制代码
    所在包:java.net 
    public class Socket
    	   extends Object
     	   implements Closeable
    实现客户端套接字。套接字是两台机器之间通信的端点

常用方法:

方法名 作用
Socket(InetAddress address,int port) 创建流套接字并将其连接到指定IP地址的指定端口号
Socket(String host,int port) 和上面功能相同,不过在底层原理中会将host字符串转换为InetAddress
OutputStream getOutputStream() 返回此套接字的输出流
接收数据
复制代码
创建服务器端Socket对象(ServerSocket)
    	ServerSocket(int port);
    	ServerSocket ss=new ServerSocket(int port);
    2.获取输入流,读数据,并把数据显示在控制台
    	InputStream is=ss.getInputStream();
    3.释放资源
    	ss.close();
ServerSocket
复制代码
    public class ServerSocket
    	   extends Object
    	   implements Closeable
    服务器套接字。服务器套接字等待通过网络进入的请求。它根据该请求执行一些操作,然后可能将结果返回给请求者

常用方法:

方法名 作用
ServerSocket(in port) 创建绑定到指定端口的服务器套接字
Socket accept() 侦听要连接到此套接字并接收它 返回一个Socket对象

TCP通信案例1

代码示例:

复制代码
    发送的核心代码
    	Socket s=new Socket(InetAddress:"localhost",port:12345);
    	OutpurStream os=s.getOutputStream();
    	os.write("需要传递的内容".getByte());
    	os.close();
    	s.close();
    接收的核心代码
    	ServerSocket ss=new ServerSocket(port:12345);
    	InputStream is=ss.getInputStream();
    	Socket s = ss.accept();
    	byte[] by=new byte[1024];
    	int len = is.read(by);
    	String data=new String(by,0,len);
    	System.out.print("数据是="+data);
    	ss.close();       //一般释放这一个就可以了 因为is是承接ss对象定义的
    	is.close();

TCP接收数据后给出反馈案例2

代码示例:

复制代码
    发送:
    	Socket s=new Socket(InetAddress:"localhost",port:12345);
    	OutputStream os=s.getOutputStream();
    	os.write("TCP我来了!".getByte());
    	
    	//接收服务器反馈
    	InputStream is=s.getInputStream();
    	byte[] by=new byte[1024];
    	int len=is.read(by);
    	String data=new String(by,0,len);
    	System.out.print("客户端:"+data);
    	s.close();
    	
    	接收:
    	ServerSocket ss=new ServerSocket(port:12345);
    	Socket s=ss.accept();
    	InputStream is=s.getInputStream();
    	byte[] by=new byte[1024];
    	int len=is.read(by);
    	String data=new String(by,0,len);
    	System.out.print("服务端:"+data);
    	
    	//给出反馈
    	OutputStream os=s.getOutputStream();
    	os.write("数据已收到".getByte[]);
    	
    	ss.close();
    	//s.close();
    	//is.close();

TCP接收数据后给出反馈案例3

代码示例:

复制代码
    服务端
    	public class ServerDemo{
    		public static void main(String[] args) throws IOException{
    			ServerSocket ss = new ServerSocket(10080);
    			Socket s = ss.accept();
    			BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    			String line;
    			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\ Users\ 23353\ Desktop\ 666\ xxx.txt")));
    			while((line=br.readLine())!=null){      //字符流的特有方法:String readLine()
    				System.out.println(line);
    				bw.write(line);
    				bw.newLine();
    				bw.flush();
    			}
    			ss.close();
    		}
    	}
    客户端
    	public static void main(String[] args) throws IOException{
    		Socket s = new Socket("100.64.219.93",10080);
    		OutputStream os = s.getOutputStream();
    		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();
    		}
    		s.close();
    	}

TCP接收数据后给出反馈案例4

要求:
服务器端数据来源于文件
客户端数据来源于文件
代码示例:

复制代码
    服务器端
    	public static void main(String[] args) throws IOException{
    		ServerSocket ss = new ServerSocket(10080);
    		Socket s = ss.accept();
    		BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    		String line;
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new 	FileOutputStream("C:\ Users\ 23353\ Desktop\ 666\ xxx.txt")));
    //这里用BufferedWriter bw = new BufferedWriter(new FileWriter("C:\ Users\ 23353\ Desktop\ 666\ xxx.txt"));  也可以
    			
    		while((line=br.readLine())!=null){//字符流的特有方法StringreadLine()
    			System.out.println(line);
    			bw.write(line);
    			bw.newLine();
    			bw.flush();
    		}
    		ss.close();
    	}
    客户端
    	public static void main(String[] args) throws IOException{
    		Socket s = new Socket("100.64.219.93",10080);
    		OutputStream os = s.getOutputStream();
    		BufferedReader br = new BufferedReader(new FileReader("C:\ Users\ 23353\ Desktop\ 666\ laiyuan.txt"));
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    		String line;
    		while((line=br.readLine())!=null){
    			bw.write(line);
    			bw.newLine();
    			bw.flush();
    		}
    		s.close();
    	}

全部评论 (0)

还没有任何评论哟~