计算机网络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());
}
}
实验截图:
2.同理 创建InetAddress对象 采用getByName方法
然后getHostAddress()
代码实现:
InetAddress CS_Address=InetAddress.getByName("www.csdn.com");
System.out.println("CSDN的IP地址为:"+CS_Address.getHostAddress());
实验截图:
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);
实验截图:
至此 5-1实验结束
实验5-2 Socket网络编程
习题1
利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。
客户端向服务器端发送Time命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送Exit命令,服务器端向客户端返回“Bye”后退出。
编写完整程序;一个服务器端程序,一个客户端程序。服务器端和客户端都需要打印出接受到的消息和发出的命令。
下图为运行结果示例
习题2
编写一数据报通信程序,实现简单的聊天功能。
“聊天内容”和“输入文本”分别为当前聊天的历史信息和当前要传送出去的聊天文本。“确定”、“清空”、“退出”三个按钮分别实现发送当前聊天文本、清空当前聊天文本和退出系统的功能。
界面可参考如下格式
这两道题其实是考察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());
实验截图:
接下来习题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);
}
启动两个 开始简单交互
3.合并图形界面与UDP交流并添加view函数循环输出接受到的信息到text
实验5-3 Socket网络编程
利用Socket类和ServerSocket类,编写一个C/S程序,实现网络文件传输。
客户端向服务器端发送请求,服务器端当接受到客户端的请求之后,先向其传输文件名,当客户端接受完毕之后,向客户端传输文件
客户端连上服务器后接收传输文件,并进行改名(文件名可自行定义)存在本地。
编写完整程序;一个服务器端程序,一个客户端程序。服务器端和客户端都需要打印出交互过程。
下图为运行结果示例
实验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();
实验截图:
好了 完成了 王者荣耀冲冲冲!!!