Java Socketの最初の通信プログラムの具体的な実現とよくある問題の分析
5566 ワード
サーバクラスの構築
サーバの構築には、次の3つのステップがあります.
a:サーバソケットを作成し、ポート番号を指定します.次のようになります.
b:クライアントのインスタンスsocketを作成してサーバに接続します.次のようになります.
c:接続後にインスタンス化されたclientオブジェクトに対して情報交流操作を行う.
①入力フローを取得します.
特に注意:ここで入力ストリームの情報を使用した後、入力ストリームを閉じる必要があります.そうでないと、出力ストリームの情報交換に影響します.
③出力ストリームを取得する.
④出力ストリームを操作し、クライアントにメッセージを伝達する:
クライアントクラスの構築
クライアントクラスの構築の大部分はサーバ側と似ています.
①サーバに接続するためのSocketを作成し、接続を要求します.(すなわちaccpet()メソッドによって検出される)
特に注意:ここlocalhostはあなたのサーバーがあるホスト名で、私のここのdemoは自分のパソコンにあるので、直接「localhost」(127.0.0.1)を使って、クライアントのポートとサーバー側が作成したポートが一致しなければ、接続できません.
②接続が確立されると、入出力ストリームを取得できます.具体的な方法については、サーバ側の説明を参照してください.
demoソース
Client.java
Client.java
サーバの構築には、次の3つのステップがあります.
a:サーバソケットを作成し、ポート番号を指定します.次のようになります.
ServerSocket server=new ServerSocket(8888)。
ここでの構造方法のパラメータはint port,ポート番号である.ここでは、前のポートが特定のアプリケーションによって占有されているため、ここでport<1023を強制すると、予知できないエラーが発生する可能性があります(port>1023).b:クライアントのインスタンスsocketを作成してサーバに接続します.次のようになります.
Socket client=server.accept()。
この文は、サーバサーバサーバがクライアントに接続されないまでブロックされます.インスタンスが取得されると、プログラムは下に実行されます.c:接続後にインスタンス化されたclientオブジェクトに対して情報交流操作を行う.
①入力フローを取得します.
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
②入力フローを操作し、クライアントの情報を取得する: //get input stream
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
String infoFromClient=null;
while((infoFromClient=in.readLine())!=null){
System.out.println("Server get InfoFromClient:"+infoFromClient);//print the information from client
}
client.shutdownInput();//close input stream !Important
特に注意:ここで入力ストリームの情報を使用した後、入力ストリームを閉じる必要があります.そうでないと、出力ストリームの情報交換に影響します.
③出力ストリームを取得する.
//get output stream
PrintWriter writer=new PrintWriter(client.getOutputStream())
④出力ストリームを操作し、クライアントにメッセージを伝達する:
writer.println("hello,Client.I am server");
writer.flush();
⑤オープンリソース、入出力フロー、クライアントを閉じる writer.close();
in.close();
client.close();
クライアントクラスの構築
クライアントクラスの構築の大部分はサーバ側と似ています.
①サーバに接続するためのSocketを作成し、接続を要求します.(すなわちaccpet()メソッドによって検出される)
Socket client=new Socket("localhost", 8888);//get connection to server;
特に注意:ここlocalhostはあなたのサーバーがあるホスト名で、私のここのdemoは自分のパソコンにあるので、直接「localhost」(127.0.0.1)を使って、クライアントのポートとサーバー側が作成したポートが一致しなければ、接続できません.
②接続が確立されると、入出力ストリームを取得できます.具体的な方法については、サーバ側の説明を参照してください.
demoソース
Client.java
package socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* Socket ,
* ,
*
*
* */
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
// TODO Auto-generated method stub
Client client=new Client();
client.onStart();
}
private void onStart() throws UnknownHostException, IOException {
// TODO Auto-generated method stub
Socket client=new Socket("localhost", 8888);//get connection to server;
System.out.println("****client connect to server****");
//get output stream first !important
PrintWriter out=new PrintWriter(client.getOutputStream());
BufferedReader inconsole=new BufferedReader(new InputStreamReader(System.in));//input message from console
System.out.println("please input message to server:");
String infoToServer=inconsole.readLine();
while(infoToServer!=null){
out.write(infoToServer);
out.flush();
infoToServer=inconsole.readLine();
// break;
}
System.out.println("send successfully!");
client.shutdownOutput();//close the outputStream
//get input stream
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
String infoFromServer=null;
while((infoFromServer=in.readLine())!=null){
System.out.println("Client get InfoFromServer:"+infoFromServer);
}
//close all
inconsole.close();
in.close();
out.close();
client.close();
}
}
Client.java
package socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/*
a)、 ServerSocket 。
b)、 accept() 。
c)、 , 。
d)、 。
e)、 。
author:zipple;2017-1-13
bug:
* */
public class Server {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Server server=new Server();
server.onStart();
}
private void onStart() throws IOException {
System.out.println("*************loading****************");
ServerSocket serverSocket=new ServerSocket(8888);//new a server
System.out.println("server started successfully,wait for client...");
Socket client = serverSocket.accept();//get connection
//get input stream
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
String infoFromClient=null;
while((infoFromClient=in.readLine())!=null){
System.out.println("Server get InfoFromClient:"+infoFromClient);//print the information from client
}
client.shutdownInput();//close input stream !Important
//get output stream
PrintWriter writer=new PrintWriter(client.getOutputStream());
writer.println("hello,Client.I am server");
writer.flush();
writer.close();
in.close();
client.close();
}
}