资源描述
天津理工大学实验报告
学院(系)名称: 计算机与通信工程学院
姓名
刘新伟
学号
专业
计算机科学与技术
班级
2008级4班
实验项目
试验二:基于TCP/UDP的Socket编程
课程名称
计算机网络原理
课程代码
实验时间
2010年12 月 14日
实验地点
7-219
批改意见
成绩
教师签字:
实验目的:
熟悉和掌握socket编程的基本理论和方法。掌握基于TCP和UDP的工作原理以及Socket编程的一般方法,能够编写简单的网络应用程序。
实验要求:
请在以下题目中选择一个,按照要求完成实验,并完成实验报告。实验不分组。编程可以使用任何高级语言,建议使用java或C++。
也可以自拟题目。
试验过程:
实验2.1:基于TCP and UDP的socket编程
1、 实验内容:
a) 利用Java或C++语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。
b) 修改上述程序,实现服务器根据客户请求,将服务器端指定的文件可靠地传输给客户。如果服务器没有指定的文件,服务器将给客户返回一个信息,通知客户其请求文件不存在。
c) 有条件的同学可以进一步改进b)的程序,使之更实用。比如可以请求服务器先传输目录,然后客户根据目录请求传输文件等。
2、 实验方式:每位同学上机编程实验,实验指导教师现场指导。程序可参考附录的程序1、程序2、程序3和程序4(程序中有错误需完善)
3、 实验报告:在实验报告中要说明Socket编程的客户端和服务器端主要步骤、利用Java语言用到的主要类及其主要作用、TCP和UDP编程的主要差异和特点、你所实现的文件传输的程序代码、实验过程和实验结果。
1.基于TCP的socket编程
TCPClient端的程序
import java.io.*;
import .*;
public class TCPClient
{
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
BufferedReader infromUser =
new BufferedReader(
new InputStreamReader(System.in));
Socket clientSocket = new Socket("59.67.146.124",6789);
DataOutputStream outToServer =
new DataOutputStream(
clientSocket.getOutputStream());
BufferedReader infromServer =
new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
sentence = infromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = infromServer.readLine();
System.out.println("FROM SERVER:"+modifiedSentence);
clientSocket.close();
}
}
TCPSever端程序
import java.io.*;
import .*;
class TCPServer{
public static void main(String argv[]) throws Exception
{
String ClientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true){
Socket connectionSocket = welcomeSocket.accept();
BufferedReader infromClient =
new BufferedReader(new InputStreamReader(
connectionSocket. getInputStream()));
DataOutputStream outToClient =
new DataOutputStream(
connectionSocket.getOutputStream());
ClientSentence = infromClient. readLine();
capitalizedSentence =
ClientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
}
}
}
编程中注意客户程序和服务器程序端口号要相同。客户程序中的
Socket clientSocket = new Socket("59.67.146.124",6789);使用计算机名和客户机ip均可。
运行效果:
2基于UDP的socket编程
UDPServer
import java.io.*;
import .*;
class UDPServer {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
serverSocket.send(sendPacket);
}
}
}
UDPClient
import java.io.*;
import .*;
class UDPClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("user132");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
客户端程序和服务器程序要注意端口号一致,客户机用计算机名获得IP地址。
运行效果:
展开阅读全文