1、服务器端程序
package Socket; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket; public class EchoServer { public static void main(String[] args) throws Exception { ServerSocket server =null;//定义ServerSocket对象
Socket client=null;//定义socket对象,表示客户端
PrintStream out=null;//声明打印流对象,以向客户端输出
BufferedReader buf = null;//用于接收客户端发来的信息
server = new ServerSocket();//此服务器在8888端口进行监听
boolean f=true;
while(f){
System.out.println("服务器运行,等待客户端连接");
client=server.accept();//接收客户端连接
buf = new BufferedReader(new InputStreamReader(client.getInputStream()));//得到客户端的输入信息
out= new PrintStream(client.getOutputStream());
//循环读取buf所有内容
boolean flag=true;
while(flag){
String str=buf.readLine();
if(str==null||"".equals(str)){
flag=false;//结束循环
}
else{
if("bye".equals(str)){
flag=false;
}
else
{
out.println("ECHO:"+str);//正常结束,向客户端回显信息
}
}
}
out.close();
client.close(); }
server.close();
} }
2、客户端程序
package Socket; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException; public class EchoClient { public static void main(String[] args) throws Exception { Socket client=null;//声明Socket对象
client=new Socket("localhost",);//指定连接的主机和端口
BufferedReader buf=null;//接收服务器端发送回来的信息
PrintStream out=null;//输出流,向服务器端发送信息
BufferedReader input=null;
input=new BufferedReader(new InputStreamReader(System.in));//从键盘接收数据
out = new PrintStream(client.getOutputStream());//向服务器端发送信息
buf= new BufferedReader(new InputStreamReader(client.getInputStream()));//接收服务器端输入信息
boolean flag=true;
while(flag){
System.out.println("输入信息:");
String str=input.readLine();//从键盘接收数据
out.println(str); //向服务器端输入信息
if("bye".equals(str)){ //如果输入bye,结束操作
flag=false;
}
else{
String echo=buf.readLine();//接收ECHO信息
System.out.println(echo);//输出ECHO信息
}
}
client.close();
buf.close();
} }
效果如下:
此时,服务器每次只能有一个用户连接,属于单线程,要让多个用户连接服务器,要使用多线程...