计算机网络Socket网络编程实验

写在开头 :实验写完好久了,一直没抽出时间写这个博客 还是太懒了啊

注:这次实验代码仅供参考学习,照搬抄袭不可取,有可能实验0分


5-1 Socket网络编程

题目:
1.使用InetAddress类的方法获取本地机的名称和IP地址。

2.使用InetAddress类的方法获取网站的IP地址,如果存在多个IP地址,要求全部返回。

3.使用URL类下载深圳大学首页,并统计下载得到网页文件的大小


代码实现

1. 创建 InetAddress对象getHostAddress() 和getHostName()即可

public class get_IP {
	public static void main(String[] args) throws UnknownHostException {
		// TODO 自动生成的方法存根
		InetAddress i_Address=InetAddress.getLocalHost();
		System.out.println("本机ip地址为: "+i_Address.getHostAddress());
		System.out.println("本机名为 : "+i_Address.getHostName());
	}
}

实验截图:

Java项目dns域名在哪里配置 java socket dns_System


2.同理 创建InetAddress对象 采用getByName方法
然后getHostAddress()

代码实现:

InetAddress CS_Address=InetAddress.getByName("www.csdn.com");
            System.out.println("CSDN的IP地址为:"+CS_Address.getHostAddress());

实验截图:

Java项目dns域名在哪里配置 java socket dns_socket_02


3. 以网址创建url对象 写入即可

代码实现:

try{
//下载指定URL的资源文件
String urlString="http://www.szu.edu.cn";
URL url=new URL(urlString);
InputStream in=url.openStream();
FileOutputStream fout=new FileOutputtream(newFile("深大首页.htm"));int byteNum=0;
for(int i=0;i>-1;byteNum++t){
i=in.read();
fout.write(i);
System.out.print("下载的网页文件大小:"+Integer.toString(byteNum));catch(MalformedURLException e)
System.out.printIn("创建URL类对家失败"+e);
catch(Exception e)
System.out.printlIn("其他异常"+e);

实验截图:

Java项目dns域名在哪里配置 java socket dns_System_03


至此 5-1实验结束


实验5-2 Socket网络编程

习题1

利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。

客户端向服务器端发送Time命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送Exit命令,服务器端向客户端返回“Bye”后退出。

编写完整程序;一个服务器端程序,一个客户端程序。服务器端和客户端都需要打印出接受到的消息和发出的命令。

下图为运行结果示例

Java项目dns域名在哪里配置 java socket dns_客户端_04


习题2

编写一数据报通信程序,实现简单的聊天功能。

“聊天内容”和“输入文本”分别为当前聊天的历史信息和当前要传送出去的聊天文本。“确定”、“清空”、“退出”三个按钮分别实现发送当前聊天文本、清空当前聊天文本和退出系统的功能。

界面可参考如下格式

Java项目dns域名在哪里配置 java socket dns_socket_05


这两道题其实是考察Socket类的使用

先说习题1

客户端部分创建socket对象 利用OutputStream传递消息
服务器部分创建相同套接字socket 利用InputStream读取,字符串判断输出数据

代码实现:

//服务器部分
			ServerSocket server = new ServerSocket(12345);
			System.out.println("服务器启动完毕");
			Socket socket = server.accept();
			System.out.println("创建客户连接");
			InputStream input = socket.getInputStream();
			InputStreamReader isreader = new InputStreamReader(input);
			BufferedReader reader = new BufferedReader(isreader);
			while (true) {
				String str = reader.readLine();
				if (str.equals("exit")) {

					System.out.println("Bye");
					break;
				}
				if (str.equals("Time")) {
					 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
			          System.out.println("服务器当前的时间为: "+ df.format(new Date()));// new Date()为获取当前系统时间
				}
			}
//客户端部分
	Socket socket = new Socket("localhost", 12345);
			OutputStream out = socket.getOutputStream();
			out.write("Time\n".getBytes());
			out.write("exit\n".getBytes());

实验截图:

Java项目dns域名在哪里配置 java socket dns_Java项目dns域名在哪里配置_06


接下来习题2

在写习题2之前需要简单学习 图形化编程 学会 JFrame布局
然后涉及的计算机网络知识是UDP数据传输
由于为开放图形化编程 这里不给出具体实现代码
仅作简单指示
1.界面布局部分:
聊天界面采用JFrame布局 BorderLayout() 东西南北布局

private JTextArea text; //聊天界面
	private	JTextField ipText; //ip地址显示
	private	JTextField sendText; //输入行
	private	JButton sendbutton; //发送按钮
	private	JButton clearbutton; //清空按钮

发送与清空按钮对应写的函数
发送调用UDP传输
清空调用 text的 clear函数清空聊天界面

2.UDP传输部分
这里给出简单的UDP连接例子 通过如下代码变形即可

//接收方
	public static void main(String[] args) throws IOException {
			// TODO 自动生成的方法存根
			DatagramSocket mysocket=new DatagramSocket(6666); //建立socket端口
			while(true){
			System.out.println("请输入");
			Scanner IN=new Scanner(System.in);
	        String msg = IN.nextLine();
	        //发送信息到客户端B
	        System.out.println("开始发送数据:"+msg);
	        byte[] buf = msg.getBytes();	        
	        InetAddress toIp = InetAddress.getLocalHost();
	        // 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
	        DatagramPacket dp = new DatagramPacket(buf,buf.length,toIp,7777);	        
	        //用数据报包的套接字,通过7777端口发送数据包
	        mysocket.send(dp);    
	        //接收客户端B的信息
	        byte[] recBuf = new byte[1024];
	        DatagramPacket recDp = new DatagramPacket(recBuf,recBuf.length);
	        //信息接收
	        mysocket.receive(recDp);        
	        String recMsg = new String(recBuf,0,recDp.getLength());
	        System.out.println("用户B说: "+recMsg);			
			}
		}
//发送方
		DatagramSocket mysocket=new DatagramSocket(7777);
		while(true) {
		byte[] data=new byte[1024];
		DatagramPacket pack=new DatagramPacket(data,data.length);
		mysocket.receive(pack);
		String Mesg= new String(data,0,pack.getLength());
		System.out.println("用户A说"+Mesg);
		//发送返回消息
		System.out.println("请输入信息");
		Scanner IN=new Scanner(System.in);
		String msg=IN.nextLine(); //输入
		System.out.println("开始发送信息: "+msg);
		InetAddress toIp = InetAddress.getLocalHost();
		byte[] buf = msg.getBytes();
		DatagramPacket dp = new DatagramPacket(buf,buf.length,toIp,6666);
		mysocket.send(dp);
	}

启动两个 开始简单交互

Java项目dns域名在哪里配置 java socket dns_socket_07

3.合并图形界面与UDP交流并添加view函数循环输出接受到的信息到text

Java项目dns域名在哪里配置 java socket dns_客户端_08


实验5-3 Socket网络编程

利用Socket类和ServerSocket类,编写一个C/S程序,实现网络文件传输。

客户端向服务器端发送请求,服务器端当接受到客户端的请求之后,先向其传输文件名,当客户端接受完毕之后,向客户端传输文件

客户端连上服务器后接收传输文件,并进行改名(文件名可自行定义)存在本地。

编写完整程序;一个服务器端程序,一个客户端程序。服务器端和客户端都需要打印出交互过程。

下图为运行结果示例

Java项目dns域名在哪里配置 java socket dns_Java项目dns域名在哪里配置_09


Java项目dns域名在哪里配置 java socket dns_java_10

实验3要求掌握Socket类和ServerSocket类传输文件
通过OutputStream BufferedInputStream BufferedOutputStream即可实现传输
仅附上客户端简单实现代码

Socket Client=new Socket("localhost",7777);
		System.out.println("连接服务器成功!");
		BufferedInputStream In_buf =new BufferedInputStream(Client.getInputStream());
		BufferedOutputStream Out_buf = new BufferedOutputStream(new FileOutputStream("D:\\c++\\dev-cpp_gr.zip"));
		byte [] buf = new byte[2048];
		int len = 0;
		while( (len = In_buf.read(buf)) != -1 ) {
			Out_buf.write(buf, 0, len);
		}
		Out_buf.flush();

实验截图:

Java项目dns域名在哪里配置 java socket dns_Java项目dns域名在哪里配置_11


好了 完成了 王者荣耀冲冲冲!!!