查看: 985| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] UDP 远程通信 (我的PC 怎么call 你的PC)

🔗
匿名用户-PJZDR  2020-7-31 00:51:54 |倒序浏览

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
不好意思,想问下大家,我在用UDP的Java程序实现 client - server 的交流,
本地电脑,局域网,自己call 自己,已经成功了。

Client端 代码如下:
************************************************************

  1. import java.net.*;
  2. import java.io.*;

  3. public class UDPClient_1 {

  4.         public static void main(String args[]) throws IOException {

  5.         DatagramSocket aSocket = new DatagramSocket();
  6.         
  7.         BufferedReader bufInput = new BufferedReader( new InputStreamReader(System.in) );
  8.         
  9.         String curr = "";
  10.         
  11.         int p = 5477;
  12.         
  13.         InetAddress aHost = InetAddress.getByName( args[0] );

  14.         while ( (curr = bufInput.readLine() ) != null) {
  15.             
  16.             try {
  17.                
  18.                 byte[] test = curr.getBytes();
  19.                
  20.                 DatagramPacket request = new DatagramPacket(test, test.length, aHost, p);
  21.                
  22.                 aSocket.send(request);

  23.                 byte[] buf = new byte[5000];
  24.                
  25.                 DatagramPacket reply = new DatagramPacket(buf, buf.length);
  26.                
  27.                 aSocket.receive(reply);
  28.                
  29.                 System.out.println( "Replied information: " + new String( reply.getData() ) + "     <----- Replied" );
  30.             }
  31.             
  32.             catch (SocketException e) {
  33.                 System.out.println("Socket information: " + e.getMessage() + "     <----- Socket" );
  34.             }
  35.             
  36.             finally {
  37.                 if ( aSocket == null )   aSocket.close();
  38.             }
  39.         }
  40.     }
  41. }
复制代码




************************************************************


Server端代码如下:
************************************************************


  1. import java.net.*;
  2. import java.io.*;

  3. public class UDPServer_1 {

  4.         public static void main( String args[] ) throws IOException{
  5.         
  6.         int serverPort = 5477;
  7.         
  8.         DatagramSocket aSocket = new DatagramSocket(serverPort);
  9.         
  10.         try {
  11.             while (!false) {
  12.                
  13.                 byte[] buffer = new byte[5000];
  14.                
  15.                 DatagramPacket aa = new DatagramPacket(buffer, buffer.length);
  16.                
  17.                 aSocket.receive(aa);
  18.                
  19.                 DatagramPacket reply = new DatagramPacket(aa.getData(),
  20.                         aa.getLength(), aa.getAddress(), aa.getPort());
  21.                
  22.                 aSocket.send(reply);
  23.             }
  24.         }
  25.         
  26.         catch(SocketException e){
  27.             System.out.println("Socket information: " + e.getMessage() + "     <------ Socket");
  28.         }
  29.         
  30.         finally{
  31.             if(aSocket != null)
  32.                 aSocket.close();
  33.         }
  34.     }
  35. }
复制代码





************************************************************


问题是:

如何进行远程连接?  比如,我在威斯康辛州的电脑(Client端),怎么call你在旧金山的电脑(Server端)

我想的是把IP 地址配置一下,port配置一下,就可以运行。


至于,具体怎么运行上面代码?  (ReadME)
************************************
javac UDPServer_1.java   (编译Server端代码)
javac UDPClient_1.java    (编译Client端代码)

(注意端口可以改如果需要)

java UDPServer_1 (运行server)

java UDPClient_1 localhost (运行Client去call 刚刚运行的server)
************************************



感谢各位大神!!!




上一篇:LC Python 刷题笔记 有志者事竟成
下一篇:求DevOps复习资料
全局:
你在旧金山的电脑得有一个公网ip,如果没有的话在路由器上设置端口转发,剩下和在局域网一样
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-PJZDR  2020-8-2 02:05:19
MichaelLee123 发表于 2020-7-31 12:24
你在旧金山的电脑得有一个公网ip,如果没有的话在路由器上设置端口转发,剩下和在局域网一样

老哥可以交流一下吗。您有电邮吗?
回复

使用道具 举报

🔗
cs900601 2020-8-3 13:55:56 | 只看该作者
全局:
诶,最近在做这个东西的 microbenchmark
如楼上所说,“如何配置公网IP”和写程序没有太大的关系应该
其实我觉得可以弄个有公网IP的云服务器,然后试着将本机与云服务器进行连接测试
然后用那台机器作为中转那样(不过应该需要改程序的逻辑)

以及,如果是用到ipv6的link-local地址,在连接时,还需要把sin6_scope_id设为想要用的网卡的ID(不过这个是C的API,Java应该也有对应的吧)
回复

使用道具 举报

🔗
zurich.hill 2020-8-5 13:13:59 | 只看该作者
全局:
cs900601 发表于 2020-8-3 13:55
诶,最近在做这个东西的 microbenchmark
如楼上所说,“如何配置公网IP”和写程序没有太大的关系应该
其 ...

老哥,可以帮我看看上面的helloworld例子不,感谢。可以加个微信么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表