多线程实现TCP通信

//客户端
public class Client {
    public static void main(String[] args) throws Exception {
        System.out.println("====客户端===");
//        1.客户端要请求于服务端的管道连接
        Socket socket=new Socket("127.0.0.1",9999);
//        2. 从socket通信管道中得到一个字节输出流
        OutputStream outputStream = socket.getOutputStream();
//        3. 把低级的字节输出流包装成高级的打印流
        PrintStream printStream = new PrintStream(outputStream);
//        4. 开始发消息出去
        while(true){
            Scanner scanner=new Scanner(System.in);
            System.out.println("请说:");
            printStream.println(scanner.nextLine());
            printStream.flush();
        }
    }
}
//服务端
public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("===服务端启动==");
//        1. 注册端口
        ServerSocket serverSocket=new ServerSocket(9999);
//        2. 定义一个循环不断接收客户端的连接请求
        while(true){
//            3. 开始等待客户端的socket管道连接
            Socket socket=serverSocket.accept();
            //启动线程
            new serverThread(socket).start();
        }
    }
}
//线程类
    class serverThread extends Thread{
        private Socket socket;
        public serverThread(Socket socket){
            this.socket=socket;
        }

        @Override
        public void run(){
            InputStream inputStream= null;
            try {
//                4. 从socket管道中得到一个字节输入流
                inputStream = socket.getInputStream();
//            5. 把直接输入流转换成字符输入流
                Reader isr=new InputStreamReader(inputStream);
//            6. 把字符输入流包装缓冲字符输入流
                BufferedReader br=new BufferedReader(isr);
//            7. 按照行读取信息,客户端也必须按照行来传输
                String line;
                while((line=br.readLine())!=null){
                    System.out.println(socket.getRemoteSocketAddress()+"说:"+line);
                }
            } catch (Exception e) {
                System.out.println(socket.getRemoteSocketAddress()+"下线了");
            }

        }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt多线程TCP客户端是一种可以在Qt应用程序中使用的多线程网络通信工具。 在使用Qt多线程TCP客户端之前,首先需要创建一个TCP Socket对象,并使用connectToHost方法连接到服务器。连接成功后,可以使用write方法发送数据到服务器。 为了实现多线程,可以使用Qt中的QThread类。首先,创建一个继承自QThread的自定义线程类,并重写run方法。在run方法中,可以编写与服务器进行通信的代码。 为了在多个线程之间共享数据,可以使用Qt中的信号和槽机制。可以在客户端线程类中定义信号,并在需要发送数据时发射信号。然后,可以将信号与服务器连接的槽函数进行连接,以便在接收到信号时执行相应的操作。 在客户端线程类中还可以使用信号和槽机制实现与主线程的通信。例如,可以在主线程中定义一个槽函数,用于接收从客户端线程发射的信号,并更新界面或执行其他相关操作。 为了确保多线程的安全性,需要采取适当的线程同步措施。可以使用Qt中的Mutex或其他同步原语来保护共享数据,以避免竞争条件和数据损坏。 使用Qt多线程TCP客户端时,需要仔细处理异常情况,例如连接中断或网络错误。可以在连接断开时发射信号,以便在主线程中进行错误处理或重新连接。 总而言之,Qt多线程TCP客户端是一种在Qt应用程序中实现多线程网络通信的方法。通过合理的设计和使用线程同步机制,可以实现高效的并发通信,并确保数据的安全性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值