【问题标题】:java socket receiver work on linux but not on windowsjava socket接收器在linux上工作,但在windows上不工作
【发布时间】:2019-03-19 15:08:18
【问题描述】:

我正在尝试编写一个简单的客户端服务器程序。客户端和服务器都用 java 编程并通过接入点作为局域网连接,服务器是我的笔记本电脑(计算机),客户端是我的 android 设备。这是客户端(android)的代码:

package com.caisar.andronet;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Main extends Activity {

    private Button mSendButton;
    private EditText ipInput;
    private EditText portInput;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mSendButton = (Button) findViewById(R.id.button1);
        ipInput = (EditText) findViewById(R.id.editText1);
        portInput = (EditText) findViewById(R.id.editText2);

        mSendButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {
                    sendPacket();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        });
    }

    public void sendPacket() throws IOException
    {
        int port = Integer.parseInt(portInput.getText().toString());
        InetAddress address = InetAddress.getByName(ipInput.getText().toString());
        String message = "Ini adalah caisar oentoro";
        byte[] messages = message.getBytes();
        DatagramSocket socket = new DatagramSocket();
        DatagramPacket packet = new DatagramPacket(messages, messages.length, address, port);
        socket.send(packet);
        socket.close();
    }

}

这是服务器程序:

import java.net.*;
import java.io.*;

class DatagramReceiver{
public static void main(String[] args){
    try
    {
        int MAX_LEN = 40;
        int localPort = Integer.parseInt(args[0]);
        DatagramSocket socket = new DatagramSocket(localPort);
        byte[] buffer = new byte[MAX_LEN];
        DatagramPacket packet = new DatagramPacket(buffer, MAX_LEN);
        socket.receive(packet);
        String message = new String(buffer);
        System.out.println(message);
        socket.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
   }
 }

问题是,在 Ubuntu 上尝试服务器程序时,它运行良好,没有任何问题,但是当我在 Windows 上尝试时,服务器程序没有显示任何响应。那么“阻止”服务器侦听或接受客户端发送的数据的问题是什么?

【问题讨论】:

  • 您可以尝试关闭防火墙吗?
  • 嘿,谢谢,效果很好。但是有没有比关闭windows防火墙更好的方法呢?我使用的是 Windows 7。

标签: java network-programming


【解决方案1】:

嘿,谢谢,效果很好。但是有没有比关闭windows防火墙更好的方法呢?我正在使用 Windows 7。

您可以打开用于 UDP 的特定端口(或者 TCP 就是您正在使用的),而不是关闭整个防火墙,这会为您需要的端口关闭防火墙。

【讨论】:

  • 您可以在windows中使用netsh打开特定端口。看看here。这样您就可以创建一个添加防火墙规则的简单脚本,无需点击。
猜你喜欢
  • 2014-11-09
  • 2021-01-23
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
相关资源
最近更新 更多