ネットワークソケット
35278 ワード
guarded suspension
ターゲットコードは何ですか?→getRequest()の目的はreturn queueです.remove(); はい.
行く条件は何ですか.→synchronized while(保護条件){wait();}ターゲットコード
保護サスペンションモード
オブジェクトのステータスの変化を識別するコードが必要です.(stateChanging Method)
※上記の内容を整理※
guarded object : queue →
LinkedList<Request>();
guarded method : getRequest()
2.1ターゲットコード:queue.remove();
2.2防御条件:キュー.peek() == null → wait()
2.3 synchronized method(){while(保護条件){wait()}宛先コード;
状態変更方法:putRequest()→保護対象オブジェクトの状態変化
3.1 synchronized method(){保護対象の状態変化コード;notifyAll()}
take(),put()→wait()を同期してサポートします.持っていくものがないと出てこない、入ってきたものが出てきて、出すときに使うのが叶います.
ネットワーク
通信可能デバイス(インターネット)
TCP
UDP
NSLookUp
public class NSLookUp {
public static void main(String[] args) {
String domain = JOptionPane.showInputDialog(
"도메인을 입력하시오"
);
// IP 나타내는 객체
InetAddress inetaddr[] = null;
try {
inetaddr = InetAddress.getAllByName(domain);
} catch(UnknownHostException e) {
e.printStackTrace();
}
for(int i = 0; i < inetaddr.length; i++) {
System.out.println(inetaddr[i].getHostName());
System.out.println(inetaddr[i].getHostAddress());
System.out.println(inetaddr[i].toString());
System.out.println("---------------------------");
}
}// main
}
private final Queue<Request> queue = new LinkedList<Request>();
→ inetaddr = InetAddress.getAllByName(domain);
:ドメイン名getHostName()
:IP番号getHostAddress()
:ホスト名/ホストアドレスEchoClient / EchoServer
public class EchoServer {
public static void main(String[] args) {
Socket sock = null;
OutputStream out = null;
OutputStreamWriter osw = null;
PrintWriter pw = null;
InputStream in = null;
InputStreamReader isr = null;
BufferedReader br = null;
try {
ServerSocket server = new ServerSocket(10001);
System.out.println("접속을 기다립니다.");
sock = server.accept();
InetAddress inetaddr = sock.getInetAddress();
System.out.println(
inetaddr.getHostAddress() + " 로 부터 접속하였습니다."
);
out = sock.getOutputStream();
in = sock.getInputStream();
osw = new OutputStreamWriter(out);
pw = new PrintWriter(osw);
isr = new InputStreamReader(in);
br = new BufferedReader(isr);
String line = null;
while( (line = br.readLine()) != null ) {
System.out.println(
"클라이언트로 부터 전송받은 문자열 : " + line
);
pw.println(line);
pw.flush();
}
System.out.println(line);
} catch(Exception e) {
System.out.println(e);
} finally {
try {
br.close();
} catch(Exception e) {}
try {
isr.close();
} catch(Exception e) {}
try {
in.close();
} catch(Exception e) {}
try {
pw.close();
} catch(Exception e) {}
try {
osw.close();
} catch(Exception e) {}
try {
out.close();
} catch(Exception e) {}
try {
sock.close();
} catch(Exception e) {}
}
} // main
}
public class EchoClient {
public static void main(String[] args) {
Socket sock = null;
OutputStream out = null;
OutputStreamWriter osw = null;
PrintWriter pw = null;
InputStream in = null;
InputStreamReader isr = null;
BufferedReader br = null;
BufferedReader keyboard = null;
InputStreamReader keyIsr = null;
try {
sock = new Socket("127.0.0.1", 10001);
keyIsr = new InputStreamReader(System.in);
keyboard = new BufferedReader(keyIsr);
out = sock.getOutputStream();
in = sock.getInputStream();
osw = new OutputStreamWriter(out);
pw = new PrintWriter(osw);
isr = new InputStreamReader(in);
br = new BufferedReader(isr);
String line = null;
while( (line = keyboard.readLine()) != null ) {
if(line.equals("quit")) break;
pw.println(line);
pw.flush();
String echo = br.readLine();
System.out.println("서버로부터 전달받은 문자열 : " + echo);
}
pw.close();
br.close();
sock.close();
} catch(Exception e) {
System.out.println(e);
} finally {
try {
keyboard.close();
} catch (Exception e) {}
try {
keyIsr.close();
} catch (Exception e) {}
try {
br.close();
} catch (Exception e) {}
try {
isr.close();
} catch (Exception e) {}
try {
in.close();
} catch (Exception e) {}
try {
pw.close();
} catch (Exception e) {}
try {
osw.close();
} catch (Exception e) {}
try {
out.close();
} catch (Exception e) {}
try {
sock.close();
} catch (Exception e) {}
}
} // main
}
サーバを実行してからクライアントを実行実行結果
toString()
:ポート番号で接続可能.10001は生成者のポート番号ですServerSocket
:サーバスロットの受け入れに伴い、クライアントは接続前にブロックされている.(非運転状態)server.accept()
: new Socket(ip, port);new Socket("127.0.0.1", 10001);
を抜くと、クライアントにIPアドレスが与えられます.getInetAddress()
読み物があるまでwhile( (line = br.readLine()) != null )
で封鎖される.readLine()
停止.キーボードで入力し、行をサーバのreadlineに出力し、クライアントのreadlineに移動し、コンソールウィンドウに出力し、キーボードで待機します.Client
readLine()
InputStreamReader(System.in);
readline()具体値BufferedReader(keyIsr);
待機.Server
String echo = br.readLine();
待機.こだまはこだまです。
Reference
この問題について(ネットワークソケット), 我々は、より多くの情報をここで見つけました https://velog.io/@menu34/네트워크-Socketテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol