TcpUdp与Socket的学习(2)

刚刚整理了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();
				}
			}
		}


结果

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值