服务器程序
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();
}
}
上述程序只能响应一个客户端程序的连接请求,在实际应用中,服务器一般需要同时响应多个客户请求,因此ServerSocket对象的accept()方法每当有一个连接请求发生时,就会产生一个Socket对象,所以只要用此方法,反复监听客户请求,就可以为每一个客户生成一个专用的Socket对象进行通信。
要管理这么多的Socket对象,最好的办法是将Socket对象放到线程中,这样当每一个Socket对象执行完任务后,只有包含该Socket对象的线程会终止,对其它线程没有任何影响。