TCP/IP网络通信实现

       

目录

       

        1. TCP/IP:

        2.TCP/IP的三次握手:

        3.服务器端代码

        4.客户端代码:

        5.总结

        1. TCP/IP:

               三次握手、四次挥手、面向连接安全可靠的传输协议,相对时间慢。准确性高,适用于对数据准确性有要求的场合

        2.TCP/IP的三次握手:

         三次握手:

                第一次握手:客户端发送SYN请求报文到服务端,服务端收到客户端发来的请求。

                第二次握手:服务端发送SYN/ACK报文到客户端,客户端收到SYN/ACK报文

                第三次握手:客户端发送ACK确认报文,确认号Y+1,服务器端收到ACK确认报文。

        3.服务器端代码

package com.hqyj.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest {
	public static void main(String[] args) {
		InputStream is=null;
		OutputStream os=null;
		ServerSocket ss=null;
		Socket socket=null;
		try {
			//创建服务端套接字对象,定端口号为6666,用来接收客户端发来的socket对象
			ss = new ServerSocket(6666);
			//接收客户端发来的socket,当服务器没有接收socket时,会发生阻塞
			socket = ss.accept();
			//用流来接受客户端发来的内容
			
			//从套接字中获取字节输入流
			 is = socket.getInputStream();
			 //准备字节数组,作为进行读取的介质
			byte[] b = new byte[1024];
			//从字节流中读取内容,读取到数组中,并返回读取的字节数量
			int length=is.read(b);

			// 将字节数组拼成字符串
			String content = new String(b, 0, length);
			System.out.println("客户端:"+content);
			
			//通过输出流向客户端发送回复
			
			//获取字节输出流,进行回复
			os = socket.getOutputStream();
			//准备一个回复语句
			String response = "这里是服务端,请问您有什么问题";
			//将回复语句转换为字节数组进行传递
			os.write(response.getBytes());
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				is.close();
				os.close();
				socket.close();
				ss.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

        4.客户端代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class ClientTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Socket socket = null;
		OutputStream os = null;
		InputStream is = null;
		try {
			//创建socket对象,定IP地址和端口号
			socket = new Socket("127.0.0.1",9999);
			从套接字中获取字节输出流
			os = socket.getOutputStream();
			//准备一个输入语句
			Scanner scan = new Scanner(System.in);
			String request = scan.next();
			//将发送请求转换为字符数组进行传递
			os.write(request.getBytes());
			
			//获取字节输入流进行读取确认
			is = socket.getInputStream();
			
			//定义一个字节数组,作为进行读取的介质
			byte b[] = new byte[1024];
			
			//从字节流中读取内容,读取到数组中,并返回读取的字节数量
			int length=is.read(b);
			
			String str = "";			
			//将数组拼接到字符串
		    str=new String(b,0,length);
			System.out.println(str);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				is.close();
				os.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

}

        5.总结:

                通过在华清远见的学习,我了解了TCP/IP网络通信实现的流程,能够实现TCP网络通信中服务端和客户端的连接。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值