java udp 长连接_关于TCP/UDP通信长连接->消息队列kafka+springboot

TCP/UDP长连接的误区:

对于TCP来说,属于连接式通信协议。需要实例化ServerSocket对象,通过serverSocket.accept()来建立阻塞,同时还可以通过bind方法来绑定服务端IP和PORT代码如下:

服务端:

packagecom.example.springbootkafka2;importcom.example.serverconfig.ServerConfig;importlombok.SneakyThrows;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.ApplicationArguments;importorg.springframework.boot.ApplicationRunner;importorg.springframework.core.Ordered;importorg.springframework.stereotype.Component;import java.net.*;import java.io.*;importjava.util.List;importjava.util.concurrent.LinkedBlockingQueue;

@Componentpublic class ServerSocket1 implementsApplicationRunner, Ordered {

@AutowiredprivateConfig config;

@AutowiredprivateServerConfig serverConfig;

@AutowiredprivateProducer producer;//监听的端口号和ip

private intPORT;privateString IP;inti;

String ip;

String message;//定义list集合

Listlist;

@Overridepublic void run(ApplicationArguments args){//实现ApplicationRunner, Ordered接口中的run方法

PORT =serverConfig.getPort();

IP=serverConfig.getIp();

list=config.getTopicList();

init();//开启服务端线程

}

@Overridepublic intgetOrder() {return 0;

}private voidinit(){new Thread(newtest1()).start();

}//开启一个test1线程

private class test1 implementsRunnable{privateString topic;

@Overridepublic voidrun() {try{

ServerSocket serverSocket= newServerSocket();

serverSocket.bind(newInetSocketAddress(IP,PORT));while(true){

Socket client=serverSocket.accept();//获取客户端的IP

InetAddress ia=client.getInetAddress();

ip=ia.getHostAddress();

System.out.println("客户端ip:"+ip);//..........................................................................//判断当前客户端是否与服务端有相匹配的IP port topic

int size =list.size();for( i=0 ;i

System.out.println("匹配成功,进行链接"+list.get(i).getIp());

topic=list.get(i).getTopic();//一个客户端连接就开户一个线程处理

new Thread(newHandlerThread(client,topic)).start();break;

}else{

System.out.println("对不起,没有匹配的" +list.get(i).getIp());

}

}

}//...........................................................................

} catch(IOException e) {

System.out.println("服务器异常:" +e.getMessage());

}

}

}//服务端线程操作过程

private class HandlerThread implementsRunnable{privateSocket client;privateString topic;publicHandlerThread(Socket client ,String topic) {this.client =client;this.topic =topic;

}

@Overridepublic voidrun() {try{//取得输入流

InputStream is =client.getInputStream();

BufferedReader bw= new BufferedReader(newInputStreamReader(is));while (true) {

String receive=bw.readLine();//queue.add(receive);

message=receive;

producer.send(topic,message);//这个是指定主题发送

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值