网络编程之TCP

之前了解了UDP通信,现在了解下TCP通信,TCP通信也能实现两台计算机的通信,但TCP通信的两端需要创建Socket对象,两者的区别在于,UDP中只有发送端和接收端,不区分客户端和服务器端,计算机之间可以任意发送数据;而TCP通信是严格区分客户端和服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器不可以主动连接客服端,并且服务器端程序需要事先启动,等待客户端的连接

Java提供了两个用于实现TCP程序的类,一个是ServerSocket类,用于表示服务器端;另一个是Socket类,用于表示客户端

ServerSocket的常用方法

 ServerSocket对象负责监听某台计算机的某个端口号,在创建ServerSocket对象后,需要继续调用该对象的accept()方法,接收来自客户端的请求。当执行了accept()方法之后,服务器端程序会发生阻塞,直到客户端发出连接请求时,accept()方法才会返回一个Socket对象用于与客户端实现通信,程序才能继续向下执行。

Socket的常用方法

 表中的getInputStream()和getOutStream()方法分别用于获取输入流和输出流。当客户端和服务器端建立连接后,数据是以I/O流的形式进行交互的,从而实现通信。

下面用代码进行演示

package Text4;

import java.io.IOException;
import java.io.OutputStream;
import java.net.*;

public class text2 {
    public static void main(String[] args) throws Exception {
     new TCPServer().listen();//创建TCPServer对象,并调用listen()方法
    }
}
    //TCP服务器端
     class TCPServer {
        private static final int PORT=9856;//定义一个端口号
        public void listen() throws Exception{//定义一个listen()方法,抛出异常
            ServerSocket serverSocket=new ServerSocket(PORT);
            //调用ServerSocket类的accept()方法接收数据
            Socket client=serverSocket.accept();
            OutputStream os=client.getOutputStream();//获取客户端的输出流
            System.out.println("开始与客户端交互数据");
            //当客户端连接到服务器端时,向客户端输出数据
            os.write(("传智播客欢迎你").getBytes());
            Thread.sleep(5000);//模拟执行其他功能占用的时间
            System.out.println("结束与客户端交互数据");
            os.close();
            client.close();
        }
}
TCP服务器端

 

package Text4;

import java.io.InputStream;
import java.net.*;

public class text1 {
    public static void main(String[] args) throws Exception {
        new TCPClient().connect();//创建TCPClient对象,并调用connect()方法
    }
}
//TCP客户端
    class TCPClient {
    private static final int PORT=9856;//服务器端的端口号
    public void connect()throws Exception {
        //创建一个Socket并连接到给出地址和端口号的计算机
        Socket client=new Socket(InetAddress.getLocalHost(),PORT);
        InputStream is=client.getInputStream();//得到接收数据的流
        byte[]buf=new byte[1024];//定义1024个字节数组的缓冲区
        int len=is.read(buf);   //将数据读到缓冲区中
        System.out.println(new String(buf,0,len));//将缓冲区中的数据输出
        client.close();         //关闭Socket对象,释放资源
    }
}


 

TCP客户端

 这就形成了完整的通信流程,在开启客户端前,必须先开启服务器端,不然会报错

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值