网络编程的实例

/*
2、创建客户/服务器应用,客户端发送"Time Require"到服务器,
服务器返回当前服务器的日期和时间,服务器能同时处理多个客户请求。  
*/
import java.net.*;
import java.io.*;
import java.util.*;
public class TCP
{
		public static void main(String[] args) throws Exception
		{
			new Thread(new TServer()).start();
		}
}
class TClient 
{
		public static void main(String[] args) throws Exception
		{
			//发送数据过程
			Socket s = null;
			for (int i = 0; i < 5; i++)
			{
				s = new Socket("172.18.177.222", 52088);
				String c_data = "Time Require........." + (i+1);
				OutputStream out = s.getOutputStream();
				out.write(c_data.getBytes());//把数据写入通道
				//接收服务器返回的数据
				InputStream in = s.getInputStream();
				byte[] buf = new byte[1024];
				int len = in.read(buf);//读取通道里面返回的数据
				String s_data = new String(buf, 0, len);
				System.out.print(s_data);
			}
			//关闭资源
			s.close();
		} 
}
class TServer implements Runnable
{
	private ServerSocket ss;
	public TServer() throws Exception
	{
		this.ss = new ServerSocket(52088);
	}
	public void run()
	{
		Socket s = null;
		try
		{
			while(true)
			{
				//接收客户端发来的数据
				s = ss.accept();
				System.out.println(s.getInetAddress().getHostAddress() + "..........Connect");
				InputStream in = s.getInputStream();
				byte[] buf = new byte[1024];
				int len = in.read(buf);
				String c_data = new String(buf, 0, len);//客户端发过来的数据转换成字符串
				System.out.println(c_data);
				//返回数据给客户端
				OutputStream out = s.getOutputStream();
				Calendar data = Calendar.getInstance();//获取时间
				Date d = data.getTime();
				String s_data = "服务端 : " + d;
				out.write(s_data.getBytes());//返回数据
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		//关闭资源
		//s.close();
		//ss.close();
	}
}



/*
1、	采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。
客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。(20分)
(服务端程序和客户端程序分别命名为Server.java和Client.java)
*/
import java.net.*;
import java.io.*;
class Client
{
    public static void main(String[] args) throws Exception
    {
		//发送数据 给定文件名
         DatagramSocket ds = new DatagramSocket(); 
		 byte[] buf = "TCP.java".getBytes();
		 DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("172.18.177.222"), 52099);
		 ds.send(dp);
		//接收数据
		String data = null;
		 ds = new DatagramSocket(52010);
		 BufferedWriter bufw = new BufferedWriter(new FileWriter("Copy.txt"));
		while(true)
		{
			  int i = 0;
			 byte[] buf1 = new byte[1024];
			 dp = new DatagramPacket(buf1, buf1.length);
			 ds.receive(dp);
			 data = new String(dp.getData(), 0, dp.getLength());
			 bufw.write(data);
			 bufw.newLine();
			 bufw.flush();
			 System.out.println(data + "--------->" + dp.getLength());
			 i++;
			 if (i == 100)
				break;
		}
		 ds.close();
    } 
}
class Server
{
	public static void main(String[] args) throws Exception
	{
		//接收数据
		DatagramSocket ds = new DatagramSocket(52099);
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		ds.receive(dp);
		//返回数据
		String data = new String(dp.getData(), 0, dp.getLength());
		System.out.println(data);
		BufferedReader burd = new BufferedReader(new FileReader(data));
		String s_data = null;
		ds = new DatagramSocket();
		while ((s_data = burd.readLine()) != null)
		{
			byte[] buf1 =s_data.getBytes();
			dp = new DatagramPacket(buf1, buf1.length, InetAddress.getByName("172.18.177.222"), 52010);
			ds.send(dp);
		}
		ds.close();
	}
}


/*
2、	编写客户/服务器程序,客户端Client.java使用DatagramSocket对象将数据包发送到服务器,
请求获取服务器端的图像(考生可自选图像文件)。服务器端Server.java将图像文件包装成数据包,
并使用DatagramSocket对象将该数据包发送到客户端。首先将服务器端的程序编译通过,并运行起来,等待客户的请求。(本题30分)
程序的运行效果如下图所示:
*/
import javax.imageio.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.image.*;
public class UdpPicture extends JFrame implements ActionListener
{
	JPanel p1, p2;
	JLabel p = new JLabel("");
	JButton b1;
	public UdpPicture()
	{
		super("图片获取【天华】");
		p1 = new JPanel();
		p2 = new JPanel();
		p2.setLayout(new BorderLayout());
		p1.setLayout(new BorderLayout());
		b1 = new JButton("获取图片");
		p1.add(b1);
		p2.add(p);
		add(p1, BorderLayout.NORTH);
		add(p2, BorderLayout.CENTER);
		setSize(432,355);
		setVisible(true);
		setDefaultCloseOperation(2);
		setLocationRelativeTo(null);
		b1.addActionListener(this);    
	}
    public static void main(String[] args) 
    {
		new UdpPicture();    
    } 
	public void actionPerformed(ActionEvent e)
	{	
		String str = null;
		if ((JButton)e.getSource() == b1)
		{
			ImageIcon picture = null;
			if(Static.num == 0)
			{
				try
				{
					PClient c = new PClient();
					c.c_start();				
					Static.str = c.getName();
					Static.num = 1;
					//显示图片
					picture = new ImageIcon(Static.str);
					File file = new File(Static.str);//获取图片路径
					FileInputStream fis = new FileInputStream(file);
					BufferedImage bufferedImg = ImageIO.read(fis);
					int imgWidth = bufferedImg.getWidth();
					int imgHeight = bufferedImg.getHeight();
					setSize(imgWidth,imgHeight);
					p.setIcon(picture);
				}
				catch (Exception e1)
				{
					System.out.println("出错");
				}
			}
			else if(Static.num == 1)
			{
					picture = new ImageIcon(Static.str);

					p.setIcon(picture);
			}
		}
	}
}
class PClient
{
	private String name;
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void sopn(Object obj)
	{
		System.out.print(obj);
	}
	public String getName()
	{
		return this.name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public void c_start() throws Exception
	{
	   //发送请求
		DatagramSocket ds = new DatagramSocket();
		byte[] c_buf = "1.jpg".getBytes();
		DatagramPacket dp = new DatagramPacket(c_buf, c_buf.length, InetAddress.getByName("127.0.0.1"), 55665);
		ds.send(dp);
		//接收请求
		ds = new DatagramSocket(55666);
		byte[] s_buf = new byte[1024];
		String str = "4.jpg";
		this.setName(str);
		FileOutputStream fos = new FileOutputStream(str);
		while(true)
		{
			dp = new DatagramPacket(s_buf, s_buf.length);
			ds.receive(dp);
			fos.write(dp.getData(), 0, dp.getLength());
			if(dp.getLength() < 1024) break;
		}
		ds.close();
	}
}
class PServer //implements Runnable
{
	public static void main(String[] args) throws Exception
	{
		    //接收客户端的请求
			DatagramSocket  ds = new DatagramSocket(55665);
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf, buf.length);
			ds.receive(dp);
			String str = new String(dp.getData(), 0, dp.getLength());
			sop(str);
			//发送数据包
			ds = new DatagramSocket();
			buf = new byte[1024];
			FileInputStream fis = new FileInputStream(str);//读取文件名
			int len;
			while((len = fis.read(buf)) != -1)
			{
				dp = new DatagramPacket(buf, len, InetAddress.getByName("127.0.0.1"), 55666);
				ds.send(dp);
			}
			buf = "886".getBytes();
			dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 55666);
			ds.send(dp);
			ds.disconnect();
			ds.close();
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void sopn(Object obj)
	{
		System.out.print(obj);
	}
}
class Static
{
	public static int num = 0; 
	public static String str = null;
}


第一个弄了我很久啊 唉, 醉了。 记录一下。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值