实验08 Java之网络编程

时间:2024.4.27

实验七 网络编程

1.实验目的

(1)掌握Socket通信。

(2)掌握UDP通信

2.实验内容

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

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

[基本要求] 编写完整程序。

服务器端:

package edu.cn.jp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class MessageServer {

public static void main(String[] args) {

try {

ServerSocket server = new ServerSocket(3000);

Socket client = server.accept();//启动倾听,等待客户端

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));//输入流对象

PrintWriter out = new PrintWriter(client.getOutputStream());//输出流对象

BufferedReader userin = new BufferedReader(new InputStreamReader(System.in));//实现键盘输入

//启动接受和发送线程

new sendThread(out,userin,server).start();

new reciveThread(in).start();

} catch (IOException e) {

e.printStackTrace();

}

}

}

package edu.cn.jp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class reciveThread extends Thread {

BufferedReader in;

// 服务器端接受线程

public reciveThread(BufferedReader in) {

this.in = in;

}

@Override

public void run() {

try {

while (true) {

String info = in.readLine();// 获取信息 if (info.equals("exit")) {

break;

}

while (info != null) {

System.out.println(info); info = in.readLine();

if (info.equals("exit")) {

System.out.println(info); break;

}

}

break;

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

package edu.cn.jp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.text.SimpleDateFormat;

import java.util.Date;

public class sendThread extends Thread {

PrintWriter out;

BufferedReader userin;

ServerSocket server;

public sendThread(PrintWriter out, BufferedReader userin, ServerSocket server ) { this.out = out;

this.userin = userin;

this.server = server;

}

@Override

public void run() {

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss"); String str = null;

try {

out.println(sf.format(new Date()));

out.flush();

while (true) {

str = userin.readLine();

out.println("Server:" + "\n" + str);// 服务器端从键盘输入

out.flush();

if (str.equals("Bybe")) {

break;

}

}

userin.close();

server.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

客户端:

package edu.cn.jp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.Socket;

public class clent {

public static void main(String[] args) {

try {

Socket server = new Socket(InetAddress.getLocalHost(), 3000);//创建套接字

BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream())); PrintWriter out=new PrintWriter(server.getOutputStream());

BufferedReader userin = new BufferedReader(new InputStreamReader(System.in));

new sendThread(out,userin).start();

new reciveThread(server,in,out,userin).start();

} catch (IOException e) {

e.printStackTrace();

}

}

}

package edu.cn.jp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class reciveThread extends Thread {

BufferedReader in;

PrintWriter out;

BufferedReader userin;

Socket client;

public reciveThread(Socket client, BufferedReader in, PrintWriter out,

BufferedReader userin) {

this.in = in;

this.client = client;

this.out = out;

this.userin = userin;

}

@Override

public void run() {

try {

while (true) {

String info = in.readLine(); if (info.equals("Bybe")) { break;

}

while (info != null) {

System.out.println(info); info = in.readLine();

if (info.equals("Bybe")) { System.out.println(info); break;

}

}

break;

}

client.close();

in.close();

out.close();

userin.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

package edu.cn.jp;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.Date;

public class sendThread extends Thread {

PrintWriter out;

BufferedReader userin;

public sendThread(PrintWriter out, BufferedReader userin) {

this.out = out;

this.userin = userin;

}

@Override

public void run() {

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss"); String str = null;

try {

out.println(sf.format(new Date()));

out.flush();

while (true) {

str = userin.readLine();

out.println("client: " + "\n" + str);

out.flush();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

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

实验08Java之网络编程

图3.9 聊天程序界面

[基本要求] 两人一组编写完整程序。

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

package cn.edu.udp.jp;

import

public classextends JFrame {

private JPanel contentPane;

private JTextField textField;

private static JTextArea textArea;

public static void receive() throws Exception {

DatagramSocket ds = new DatagramSocket(7000);

byte[] buf = new byte[1024];

DatagramPacket dp = new DatagramPacket(buf, 1024);

ds.receive(dp);

String ip = dp.getAddress().getHostAddress();

if(!InetAddress.getLocalHost().getHostAddress().equals(ip)){

textArea.append("接收UDP包:\n" + new String(buf, 0, dp.getLength()) + "\n"); } ds.close(); } public void send(String sendStr) throws Exception { InetAddress address = InetAddress.getByName("127.0.0.1"); byte[] buf = sendStr.getBytes(); DatagramPacket dp = new DatagramPacket(buf, buf.length, address, 7000); DatagramSocket ds = new DatagramSocket(); ds.send(dp); ds.close(); } static void recieve() {//接收UDP包 new Thread(new Runnable() { @Override public void run() { try { receive();

} } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }).start(); /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Gui_Udp frame = new Gui_Udp(); recieve(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Gui_Udp() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btnSureButton = new JButton("\u786E\u5B9A"); btnSureButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (textField.getText() != " ") { textArea.append("发送UDP包:\n " + textField.getText() + "\n");

try {

send(textField.getText());//发送UDP包

textField.setText(null);

} catch (Exception e) {

e.printStackTrace();

}

}

}

});

btnSureButton.setBounds(323, 34, 83, 27);

contentPane.add(btnSureButton);

JButton btnClearButton = new JButton("\u6E05\u7A7A");

btnClearButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

textField.setText("");

textArea.setText("");

}

});

btnClearButton.setBounds(323, 100, 83, 27);

contentPane.add(btnClearButton);

JButton btnOutButton = new JButton("\u9000\u51FA");

btnOutButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

System.exit(1);

}

});

btnOutButton.setBounds(323, 177, 83, 27);

contentPane.add(btnOutButton);

textField = new JTextField();

textField.setBounds(38, 178, 222, 27);

contentPane.add(textField);

textField.setColumns(10);

JScrollPane scrollPane = new JScrollPane();

scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_N

EVER);

scrollPane.setBounds(38, 13, 222, 140); contentPane.add(scrollPane);

textArea = new JTextArea();

textArea.setEditable(false);

scrollPane.setViewportView(textArea); textArea.setWrapStyleWord(true); }

}

实习总结:

这一块的实习真的好难啊。。

更多相关推荐:
Java网络编程实验报告

惠州学院计算机科学系网络工程专业SoftwareEngineeringLaboratoryDeptofComputerScienceandTechnologyHuihzouUniversityTELampFAX...

java网络编程实验报告

实验一Application与Applet程序调试运行实验目的熟悉所用系统的上机方法与步骤实验内容编写一个JavaApplication和一个Applet程序输出以下信息HelloJavaWorld1JavaA...

java聊天室实验报告 网络编程技术实验报告

网络编程技术大作业修改履历目录1文档概述...41.1文档目的和范围...41.2术语/缩略语...41.3参考文档...52系统概述...52.1项目说明...52.2需求分析...52.3可行性或难点分析.…

Java网络编程实践报告

Java网络编程实践(基于C/S的控制台聊天室)课程设计说明书课程名称:Java网络课程实践题目:基于C/S的控制台聊天室姓名:***学号:***教学班号:01指导教师:***兰州交通大学软件科学与工程系二○X…

网络编程实验报告

网络编程技术实验报告一实验目的网络编程技术是计算机科学与技术专业网络工程专业软件工程专业的一门专业基础课程本课程以Java技术为主讲授Java语言是当前最流行的网络编程语言本课程是一门实用性和综合运用性都很强的...

Java网络编程实验一到四答案

实验一开发工具和语言基础By光绪一实验目的和要求1掌握JDK的安装环境配置和使用掌握JBuilder或Eclips的安装和使用使用JDKJBuilder或Eclips编辑编译和运行Java程序2掌握Java的语...

网络编程实验 java即时聊天程序

高级网络编程实验报告实验名称即时聊天工具实验日期20xx15学生姓名学生学号一实验目的加深对网络编程中客户端和服务器的包的传送和接收在实验中学习Socket网络编程二实验环境OSWindows编程语言java开...

java与网络编程 实验一(矿大)

实验二1打印一个三角形的19的乘法表程序importjavaiopublicclass乘法表publicstaticvoidmainStringargsthrowsIOExceptionSystemoutpri...

实验四 网络编程通信http

天津理工大学实验报告

基于WinSock的简单TCP网络编程实验报告

实验报告实验课程名称通信软件基础实验课学院软件工程学院专业软件工程指导教师报告人姓名学号班级学期绑定TCP端口ifbindListenSocketsockaddrampListenAddrsizeofListe...

西安邮电大学Socket网络编程实验报告

高级Internet实验报告题目Socket网络编程学生姓名班级学号指导老师王文浪成绩西安邮电大学计算机学院20xx年4月27日一实验目的熟悉Socket网络编程熟悉CS客户机模式熟悉ServerSocket编...

实验七 应用层网络编程(一)

浙江大学城市学院实验报告课程名称计算机网络应用实验项目名称实验七应用层网络编程一实验成绩指导老师签名日期20xx0603一实验目的和要求1通过实现使用Java应用层客户端和服务器来获得关于使用JavaSocke...

java网络编程实验报告(16篇)