|
java网络程序致力于实现应用层,传输层向应用层提供的socket接口.
服务器端和客户端使用socket通信的简单程序
echoServer.java服务端程序
 /** *//**
*
*/
package et.bo.sun._1;

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;

 /** *//**
* @author zhangfeng
*
*/
 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 service() ...{
 while (true) ...{
Socket socket = null;
 try ...{
socket = serverSocket.accept(); // 等待客户连接
// 得到远端连接ip和端口
System.out.println("有新的连接.." + socket.getInetAddress() + ":"
+ socket.getPort());
// 打开通道
BufferedReader br = getReader(socket);
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) ...{
// TODO: handle exception
e.printStackTrace();
 } finally ...{
 try ...{
 if (socket != null) ...{
socket.close();
}
 } catch (Exception e) ...{
// TODO: handle exception
e.printStackTrace();
}
}
}
}

 public static void main(String[] args) throws IOException ...{
new EchoServer().service();// 启动服务器
}

}

运行后可启动服务器端, 客户端代码
 /** *//**
*
*/
package et.bo.sun._1;

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 zhangfeng
*
*/
 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() throws IOException ...{
 try ...{
// 打开通道
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 (Exception e) ...{
// TODO: handle exception
e.printStackTrace();
 } finally ...{
 try ...{
 if (socket != null) ...{
socket.close();
}
 } catch (Exception e) ...{
// TODO: handle exception
e.printStackTrace();
}
}
}

 public static void main(String[] args) throws IOException ...{
new EchoClient().talk();
}

}

运行可完成客户向服务端发信息,服务端返回相应的信息的功能.
|