南华大学
计 算 机 科 学 与 技 术 学 院
实验报告
(2010~2011 学年度
第 2 学期 )
课程名称 分布式系统
题
目 socket 通信
姓名 孙志强
学号 20084440123
专业
计算机科学
与技术
班级 计算机 081
地点 8 栋实验室 教师 徐卓然
一、 实验目的
通过实验了解 socket 通信的机制,熟悉网络通信的原理,
并理解 TCP/UDP 协议。
二、 实验步骤
运行服务器
运行客户端
服务器回应
客户端发送信息
服务器回应
三、 实验代码
Server:
import java.io.*;
import java.net.*;
public class server {
private int port=8000;
private ServerSocket serverSocket;
public server() 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(); //等待客户连接
System.out.println("New connection accepted "
+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")) //如果客户发送的消息为“bye”,就结束通信
}catch (IOException e) {
e.printStackTrace();
break;
}
}finally {
try{
if(socket!=null)socket.close(); //断开连接
}catch (IOException e) {e.printStackTrace();}
}
}
}
}
public static void main(String args[])throws IOException {
new server().service();
}
Client:
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;
public class client {
private String host="localhost";
private int port=8000;
private Socket socket;
public client()throws IOException{
socket=new Socket(host,port);
}
public static void main(String args[])throws IOException{
new client().talk();
}
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(IOException e){
e.printStackTrace();
}finally{
try{socket.close();}catch(IOException
e){e.printStackTrace();}
}
}
}
四、 实验总结
通过本次实验,重新复习了有关网络的知识,并对 java 编
程进行了复习,深刻理解了 socket 通信的机制,利用 socket
进行通信时需经以下三个步骤:a、建立 socket 连接,在
通信开始之前由通信双方确认身份,建立一条专用的虚拟
连接通道;b、数据通信:利用虚拟连接通道传送数据信
息进行通信;c、关闭:通信结束时,再将所建的虚拟连
接拆除。