各位兄台,如何获得自己JavaMail程序的当前线程所占用的端口

小弟使用JavaMail编写了一个邮件客户端,当前有一个需求,就是使用多线程连接多个邮件服务器时需要获得每个线程在本地占用的端口号,个人感觉JavaMail API封装的太深,没有给出和Socket相关的接口,所以无法获得客户端的端口号。用Java 本身的API行吗?最好是代码,能够集成在我的程序中!谢了先!
[b]问题补充:[/b]
网上有一个叫tcpviewer的工具 可以看到ip 端口 和应用的对应 挺好用的
andilyliao (高级程序员)

兄台,类似的软件我也考虑过,但是它无法集成到我的程序中,即无法将每个线程和线程所占用的端口号对应起来
[b]问题补充:[/b]
TO:zhoun (中级程序员)
这种本地端口都是随机的,
JavaMail只关心服务器端的ip和port,
并不关心本地port.

除非你自己实现一个直接通过socket发送邮件的类代替JavaMail,
自己可以控制.

所以看你的需求是什么, 是否可以改用其他的方法实现.

这位兄台,我就是图省事儿不想用socket,采用较高层次的JavaMail,哎,谁知各有优劣,不可兼得啊

6个回答

修改javamail中com.sun.mail.smtp.SMTPTransport的代码。
在 protected boolean protocolConnect(String paramString1, int paramInt, String paramString2, String paramString3)throws MessagingException方法中找到代码段
......
if (this.serverSocket != null)
openServer();
else {
openServer(paramString1, paramInt);
}

在此段代码后加入你需要的代码,this.serverSocket.getLocalPort()就是开启的本地端口

邮件的端口有几个固定的啊

发信端口是:25 收信端口是:110

网上有一个叫tcpviewer的工具 可以看到ip 端口 和应用的对应 挺好用的

这种本地端口都是随机的,
JavaMail只关心服务器端的ip和port,
并不关心本地port.

除非你自己实现一个直接通过socket发送邮件的类代替JavaMail,
自己可以控制.

所以看你的需求是什么, 是否可以改用其他的方法实现.

tcpviewer的工具对查看ip端口确实挺有用的

做个全局的Set 每起一个线程在Set中加入相应的值
或是用Runtime调用系统的命令查看商品占用

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问