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

TCP

概述:

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

互联网

TCP发送接收数据

发送数据

1.创建客户端的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()返回此套接字的输出流

接收数据

1.创建服务器端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();
	}
  • 1
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

胡为劳其生

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值