EMQX代码中用公网IP+开放的公网端口访问出现EOFException异常

使用公网IP+开放的公网端口(18086)tcp连接出现EOFException异常,服务器无日志记录,但是telnet是通的。
异常信息如下图:


使用内网地址+1883,通过代码tcp连接是正常的。请问各位大神这种是什么情况?

看不懂 java 代码:smiling_face_with_tear:问问 ai

代码用的是官网上的java示例,同样用了MQTTX去连接,也连不上,目前telnet通了,所以不知掉原因是啥。

大概率是你的公网网络设置不对。
可以这样排查一下:

  1. dashboard 设置日志等级为 debug
  2. 分别用公网和内网地址都正常请求,看日志是否有区别。
  3. 直接用 curl 2 个地址的 http,一般都有 notice 的日志说非法包的(因为不是 http 包)。
curl http://127.0.0.1:1883
2025-02-27T02:59:50.146791+00:00 [notice] supervisor: {esockd_connection_sup,<0.53515.0>}, errorContext: malformed_packet, reason: #{cause => malformed_packet,peername => {{172,100,239,1},56331},sockname => {{172,100,239,2},1883},header_type => 4}, offender: [{pid,<0.53515.0>},{name,connection},{mfargs,{emqx_connection,start_link,[#{listener => {tcp,default},limiter => #{connection => #{initial => 0,burst => 0,rate => infinity}},enable_authn => true,zone => default}]}}]
2025-02-27T02:59:51.683857+00:00 [info] msg: auth_cache_update_stats, mfa: emqx_auth_cache:update_stats/1(296), name: emqx_authz_cache, stats: {stats,stats,0,2496}
2025-02-27T02:59:51.684132+00:00 [info] msg: auth_cache_update_stats, mfa: emqx_auth_cache:update_stats/1(296), name: emqx_authn_cache, stats: {stats,stats,0,2496}
2025-02-27T02:59:55.175999+00:00 [debug] tag: MQTT, msg: raw_bin_received, mfa: emqx_connection:when_bytes_in/3(789), peername: 172.100.239.1:48864, size: 677, type: hex, bin: 474554202F20485454502F312E310D0A486F73743A203132372E302E302E313A323838330D0A436F6E6E656374696F6E3A206B6565702D616C6976650D0A43616368652D436F6E74726F6C3A206D61782D6167653D300D0A7365632D63682D75613A20224368726F6D69756D223B763D22313333222C20224E6F7428413A4272616E64223B763D223939220D0A7365632D63682D75612D6D6F62696C653A203F300D0A7365632D63682D75612D706C6174666F726D3A20226D61634F53220D0A444E543A20310D0A557067726164652D496E7365637572652D52657175657374733A20310D0A557365722D4167656E743A204D6F7A696C6C612F352E3020284D6163696E746F73683B20496E74656C204D6163204F5320582031305F31355F3729204170706C655765624B69742F3533372E333620284B48544D4C2C206C696B65204765636B6F29204368726F6D652F3133332E302E302E30205361666172692F3533372E33360D0A4163636570743A20746578742F68746D6C2C6170706C69636174696F6E2F7868746D6C2B786D6C2C6170706C69636174696F6E2F786D6C3B713D302E392C696D6167652F617669662C696D6167652F776562702C696D6167652F61706E672C2A2F2A3B713D302E382C6170706C69636174696F6E2F7369676E65642D65786368616E67653B763D62333B713D302E370D0A5365632D46657463682D536974653A206E6F6E650D0A5365632D46657463682D4D6F64653A206E617669676174650D0A5365632D46657463682D557365723A203F310D0A5365632D46657463682D446573743A20646F63756D656E740D0A4163636570742D456E636F64696E673A20677A69702C206465666C6174652C2062722C207A7374640D0A4163636570742D4C616E67756167653A207A682D434E2C7A683B713D302E390D0A0D0A
2025-02-27T02:59:55.176514+00:00 [info] tag: MQTT, msg: frame_parse_error, mfa: emqx_connection:parse_incoming/2(819), peername: 172.100.239.1:48864, reason: #{cause => malformed_packet,header_type => 4}, at_state: #{state => clean,proto_ver => 4}, input_bytes: <<"GET / HTTP/1.1\r\nHost: 127.0.0.1:2883\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nsec-ch-ua: \"Chromium\";v=\"133\", \"Not(A:Brand\";v=\"99\"\r\nsec-ch-ua-mobile: ?0\r\nsec-ch-ua-platform: \"macOS\"\r\nDNT: 1\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36\r\nAccept: text/html,application/xhtml"...>>
2025-02-27T02:59:55.176733+00:00 [debug] tag: MQTT, msg: mqtt_packet_received, mfa: emqx_connection:handle_msg/2(586), peername: 172.100.239.1:48864, packet: {frame_error,#{cause => malformed_packet,header_type => 4}}
2025-02-27T02:59:55.176959+00:00 [debug] tag: SOCKET, msg: emqx_connection_terminated, mfa: emqx_connection:terminate/2(673), peername: 172.100.239.1:48864, reason: {shutdown,#{cause => malformed_packet,peername => {{172,100,239,1},48864},sockname => {{172,100,239,2},1883},shutdown_count => malformed_packet,header_type => 4}}
2025-02-27T02:59:55.177056+00:00 [info] msg: terminate, mfa: emqx_connection:terminate/2(678), peername: 172.100.239.1:48864, reason: {shutdown,#{cause => malformed_packet,peername => {{172,100,239,1},48864},sockname => {{172,100,239,2},1883},shutdown_count => malformed_packet,header_type => 4}}
2025-02-27T02:59:55.177245+00:00 [notice] supervisor: {esockd_connection_sup,<0.53543.0>}, errorContext: malformed_packet, reason: #{cause => malformed_packet,peername => {{172,100,239,1},48864},sockname => {{172,100,239,2},1883},header_type => 4}, offender: [{pid,<0.53543.0>},{name,connection},{mfargs,{emqx_connection,start_link,[#{listener => {tcp,default},limiter => #{connection => #{initial => 0,burst => 0,rate => infinity}},enable_authn => true,zone => default}]}}]
  1. telnet 时使用 tcpdump 在 emqx 服务器上抓包,看是有包来。

如果以上方法公网都没看到有包,那就是网络设置问题了。