网络编程中Tcp传输协议

TCP传输协议

 1、特点

  建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。

 2、 演示tcp传输
   (1)tcp分客户端和服务端

   (2)客户端对应的对象是Socket
        服务端对应的对象是ServerSocket
   
   a、需求:给服务端发送给一个文本数据

  分析:

  客户端:通过查阅socket对象,发现在该对象建立时们就可以去连接指定主机。
  因为tcp是面向连接的。所以在建立socket服务时,就要有服务端存在,并连接成功。
  形成通路后,在该通道进行数据的传输。
  创建Scoket服务。并指定要连接的主机和端口。
import java.io.*;
import java.net.*;
class TcpClient
{ public static void main(String[] args) throws Exception
{
//创建客户端的Socket服务,指定目的主机和端口
Socket s=new Socket("192.168.1.254",10003);
//为了发送数据,应该获取socket流中的输出流
OutputStream out=s.getOutputStream();
out.write("gemen".getBytes());
s.close();
}   
}


   b、需求:定义端点接收数据并打印在控制台上
  分析:

 服务端:
   1,建立服务端的socket();并监听一个端口
   2,获取连接过来的客户端对象。
   通过ServerSocket的aceept方法。没有连接就会等,所以这个方法是阻塞式的
   3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端读取流来读取发过来的数据
   4、关闭服务端。
 class TcpServer {
public static void main(String[] args) throws Exception
{
//建立服务端Socket服务,并监听一个端口
ServerSocket ss=new ServerSocket(10003);
//通过accept方法获取连接过来的客户端对象
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"...connected");
//获取客户端发过来的数据,那么要使用客户端对象的读取流来读取数据
InputStream in=s.getInputStream();
 
byte[] buf=new byte[1024];
 
int len=in.read(buf);
System.out.println(new String(buf,0,len));
s.close();//关闭客户端
ss.close();
}
          }

3、演示tcp的传输的客户端和服务端的互访
 
 需求:客户端给服务端发送数据,服务端收到后,给客户端信息
  客户端:
 (1)建立socket服务,指定要连接主机和端口
 (2)获取socket流中的输出流。将数据写到该流中,通过网络发送给服务端
 (3)获取socket流中的输入流,将服务端反馈的数据获取到,并打印
 (4)关闭客户端资源
 class TcpClient2 
{
public static void main(String[] args) throws Exception
{
  Socket s=new Socket("192.168.1.254",10004);
   //创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
  OutputStream out =s.getOutputStream();//创建写入流对象

  out.write("服务端,你好".getBytes());//向写入流对象中写入数据

  InputStream in=s.getInputStream();
  byte[] buf=new byte[1024]; //创建字节数组对象
  int len=in.read(buf);     //返回字节数组长度
  System.out.println(new String(buf,0,len));//输出字节数组内容
  s.close();  //关闭资源
}

}
class TcpServer2
{
public static void main(String[] args) throws Exception
{
    ServerSocket ss=new ServerSocket(10004);
    Socket s=ss.accept();
   
    String ip=s.getInetAddress().getHostAddress();//获取ip地址
    System.out.println(ip+"...");//输出ip地址
    InputStream in=s.getInputStream();//创建读取流对象
    byte[] buf=new byte[1024];
    int len=in.read(buf);
    System.out.println(new String(buf,0,len));
   
    OutputStream out=s.getOutputStream();//创建写入流对象
   
    out.write("客户端,你也好".getBytes());//写入内容
   
   
}
}

4、总结

     通过Tcp传输协议学习,首先明白了Tcp传输协议的特点:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。在演示tcp传输过程中,明白了tcp分客户端和服务端,客户端对应的对象是Socket、服务端对应的对象是ServerSocket;通过代码练习,学会建立客户端和服务端,并能发送和接收数据。同时,复习了IO流中读取流对象InputStream和写入流对象OutputStream的使用和线程的创。

猜你喜欢

转载自blog.csdn.net/u011638706/article/details/40400843