Java(socket通信)
3482 ワード
サーバプログラム
クライアントプログラム
上記のプログラムは1つのクライアントプログラムの接続要求にしか応答できません.実際のアプリケーションでは、サーバは通常、複数のクライアント要求に同時に応答する必要があります.そのため、サーバSocketオブジェクトのaccept()メソッドは、接続リクエストが発生するたびにSocketオブジェクトが生成されるので、このメソッドを使用してクライアントリクエストを繰り返しリスニングするだけで、クライアントごとに専用のSocketオブジェクトを生成して通信することができます.このように多くのSocketオブジェクトを管理するには、Socketオブジェクトをスレッドに配置し、各Socketオブジェクトがタスクを実行した後に、このSocketオブジェクトを含むスレッドのみが終了し、他のスレッドには影響しません.
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class chatServer {
public static void main(String[] args) {
ServerSocket s=null;
Socket s1;
String sendString="Hello Net World!";
OutputStream slout;
DataOutputStream dos;
try{
s=new ServerSocket(5600);
}catch(Exception e){
e.printStackTrace();
}
while(true)
{
try{
s1=s.accept();
slout=s1.getOutputStream();
dos=new DataOutputStream(slout);
dos.writeUTF(sendString);
slout.close();
s1.close();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
クライアントプログラム
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;
public class chatClient {
public static void main(String[] args)throws Exception{
int c;
Socket s1;
InputStream s1In;
DataInputStream dis;
s1=new Socket("localhost", 5600);
s1In=s1.getInputStream();
dis=new DataInputStream(s1In);
String st=new String(dis.readUTF());
System.out.println(st);
s1In.close();
s1.close();
}
}
上記のプログラムは1つのクライアントプログラムの接続要求にしか応答できません.実際のアプリケーションでは、サーバは通常、複数のクライアント要求に同時に応答する必要があります.そのため、サーバSocketオブジェクトのaccept()メソッドは、接続リクエストが発生するたびにSocketオブジェクトが生成されるので、このメソッドを使用してクライアントリクエストを繰り返しリスニングするだけで、クライアントごとに専用のSocketオブジェクトを生成して通信することができます.このように多くのSocketオブジェクトを管理するには、Socketオブジェクトをスレッドに配置し、各Socketオブジェクトがタスクを実行した後に、このSocketオブジェクトを含むスレッドのみが終了し、他のスレッドには影響しません.