Linuxサーバでsocketリスニングポートを開く

3284 ワード

ステップ1:ローカルでテスト:まずサーバ側のsocketコードです.
package com.serverSocket.main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;

import java.net.ServerSocket;
import java.net.Socket;


public class Server {

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

		run();
	}

	public static void run() throws IOException {
		
		try {
			
			ServerSocket serverSocket = new ServerSocket(“              ”);
			
			Socket client = null;
			boolean flag = true;
			while (flag) {
				//System.out.println("      ,       。。。。");      ,       。
			
				client = serverSocket.accept();
				
				new Thread(new EchoThread(client)).start();
				Thread.sleep(500);
			}
			client.close();
			serverSocket.close();
			System.out.println("      。");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

class EchoThread implements Runnable {
	private Socket client;
	public EchoThread(Socket client) {
		this.client = client;
	}

	public void run() {

		try {

			BufferedReader in = null;
			in = new BufferedReader(new InputStreamReader(client.getInputStream(), "utf-8"));
			String line = "";
			StringBuffer bt = new StringBuffer();
			Socket sk = new Socket("    IP",              );
			OutputStream os = sk.getOutputStream();
			System.out.println(sk+":"+os);
			while ((line = in.readLine()) != null) {
				//line       
				System.out.println(line);
			}

			sk.close();
			//System.out.println("sk  ");
		} catch (IOException e1) {
			// TODO       catch  
			e1.printStackTrace();
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("error");
		}

	}




}

クライアントのsocketコード:
package com.serverSocket.main;

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

public class TCPEchoClient {  
	public static void main(String[] args) throws UnknownHostException, IOException {  
        Socket s = new Socket("IP",port);  
        OutputStream os = s.getOutputStream(); 
        String str="  ";
        os.write(str.getBytes("UTF-8"));  
        os.flush();  
        os.close();  
        s.close();  
    }  

}  

テストが成功すると、サーバに配備されます。


Javaファイルをjarにパッケージ化したり、サーバ上で直接コンパイルして実行したりすることができます.
サーバ上で直接コンパイルして実行することを選択しました.
Javaファイルコンパイルサーバで実行されるアクション

1.2つのディレクトリsrcとbinを作成するファイルディレクトリを探します。srcの下で「.Java」ファイルを保存し、binの下でコンパイル後の「.class」ファイルを保存します。


mkdir src bin

2.サービス側socketとクライアントsocketのJavaファイルをsrcディレクトリの下に配置します。


3.javaファイルをコンパイルし、生成したコンパイルファイルを作成したばかりのbinディレクトリの下に保存します。「-d」はclassファイルを生成する場所を指定します。


javac ./src/Server.java -d ./bin/
javac ./src/TCPEchoClient.java -d ./bin/

4.コンパイルを実行します。classファイル。-cp」はclasspathを表し、パスに従って、作成したものはどこを指定します。そうしないと、エラーが発生します。後でパッケージ名を指定します。クラス名で実行できます。


java -cp/bin com.serverSocket.main.Server
java -cp/bin com.serverSocket.main.TCPEchoClient
デプロイが完了したら、ポートのリスニングに問題はないはずですが、クライアント接続のテストには一般的に問題があります.接続が拒否されたという報告があります.私も解決していませんが、ファイアウォールの問題か、他の接続ブロックの問題であるべきです.システムが直接接続することはできませんから.解決策があれば教えてくださいね.

リスニングポートを表示するコマンド:


Netstat-an|grepあなたが表示するリスニングポート


Netstat-anpすべてのポートを表示