0

シンプルなクライアント サーバー プログラムを作成しようとしています。クライアントとサーバーの両方が 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 で試してみると、サーバー プログラムが応答しませんでした。では、サーバーがクライアントから送信されたデータをリッスンしたり受け入れたりするのを「ブロック」する問題は何ですか?

4

1 に答える 1

0

ねえ、ありがとう、それはうまくいきます。しかし、Windows ファイアウォールをオフにする以外に良い方法はありますか? Windows 7を使用しています。

ファイアウォール全体をオフにする代わりに、UDP に使用される特定のポートを開くことができます (または TCP が使用されています)。これにより、必要なポートに対してのみファイアウォールがオフになります。

于 2012-12-29T10:08:40.420 に答える