使用java 套接字socket编写简单的客户/服务器程序,程序实现了:在客户端输入信息,传到服务器端,再从服务器端传回信息,显示在客户端
小知识点:
如何用Eclipse运行两个进程? 答:run as之后 display selected console进行选择进程查看
看看效果(先启动服务器,再启动客户端程序)
上代码
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.Buffer;
/**
* 服务器程序
* @author zx
*
*/
public class EchoServer {
private int port = 8000;
private ServerSocket serverSocket;
public EchoServer() throws IOException{
serverSocket = new ServerSocket(port);
System.out.println("服务器启动!");
}
public String echo(String msg) {
return "echo "+msg;
}
private PrintWriter getWriter(Socket socket) throws IOException{
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
private BufferedReader getReader(Socket socket) throws IOException{
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void serivce() {
while(true){
Socket socket = null;
try {
socket = serverSocket.accept();//等待客户连接
System.out.println("New connection accepted"+socket.getInetAddress()+":"+socket.getPort());//获取到连接,输出信息
BufferedReader br = getReader(socket);//取得从客户端获取socket的输出信息socket.getInputStream()
PrintWriter pw = getWriter(socket);//创建输出流
String msg = null;
while((msg = br.readLine())!=null){
System.out.println(msg);
pw.println(echo(msg));
if(msg.equals("bye")){
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public static void main(String[] args) throws IOException {
new EchoServer().serivce();
}
}
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 客户端程序
* @author
*
*/
public class EchoClient {
private String host = "localhost";
private int port = 8000;
private Socket socket;
public EchoClient() throws IOException {
socket = new Socket(host,port);
}
private PrintWriter getWriter(Socket socket) throws IOException{
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
private BufferedReader getReader(Socket socket) throws IOException{
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void talk(){
try {
System.out.println("客户端启动!");
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
String msg = null;
while((msg = localReader.readLine())!=null){
pw.println(msg);
System.out.println(br.readLine());
if(msg.equals("bye")){
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
new EchoClient().talk();
}
}
总结:一个简单的服务器/客户端程序 为接下来的学习打下基础!