黑马程序员----GUI编程和网络编程

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

GUI简单演示

<span style="font-size:18px;">package cn.itcast.gui.p1.awt;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class FrameDemo {
/**
* @param args
*/
		public static void main(String[] args) {
			Frame f = new Frame("my frame");
			//f.setSize(500, 400);
			//f.setLocation(400, 200);275 

			f.setBounds(400, 200, 500, 400);
			f.setLayout(new FlowLayout());//设置流式布局
			Button but  = new Button("一个按钮");
			f.add(but);//将按钮添加到窗体中。
			f.addWindowListener(new WindowAdapter() {
		@Override
		public void windowClosing(WindowEvent e) {
			//System.out.println("closing......."+e);
			System.exit(0);
			}
			});
			//在按钮上加上一个监听。
			but.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			//System.out.println("button run .....");
			System.exit(0);
			}
			});
			f.setVisible(true);
			System.out.println("over");
			}
}
</span>
事件监听机制及使用案例

<span style="font-size:18px;">package cn.itcast.gui.p1.awt;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;276 

import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MouseAndKeyDemo {
		private Frame f;
		private TextField tf;
		private Button but;
		public MouseAndKeyDemo() {
			init();
			}
			private void init() {
				f = new Frame("演示鼠标和键盘监听");
				f.setBounds(400,200,500,400);
				f.setLayout(new FlowLayout());
				tf = new TextField(35);
				but = new Button("一个按钮");
				f.add(tf);
				f.add(but);
				myEvent();
				f.setVisible(true);
				}
				private void myEvent() {
				//给文本框添加键盘监听。
					tf.addKeyListener(new KeyAdapter() {
					@Override
						public void keyPressed(KeyEvent e) {
						//System.out.println("key run..."+KeyEvent.getKeyText(e.getKeyCode())+"::::"+e.getKeyCode());
						//int code = e.getKeyCode();
						//if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){
						//System.out.println("必须是数字");
						//e.consume();277 

						//}
					if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){
					System.out.println("enter run ...");
					}
			}
});
			f.addWindowListener(new WindowAdapter() {
			@Override
				public void windowClosing(WindowEvent e) {
				System.exit(0);
				}
});
			but.addActionListener(new ActionListener() {
			@Override
				public void actionPerformed(ActionEvent e) {
				//System.out.println("action run.....");
				}
});
//在按钮上添加一个鼠标监听.
			but.addMouseListener(new MouseAdapter() {
				private int count = 1;
				@Override
				public void mouseEntered(MouseEvent e) {
					//System.out.println("mouse enter..."+count++);
					//tf.setText("mouse enter..."+count++);
					}
			@Override
			public void mouseClicked(MouseEvent e) {
				if(e.getClickCount()==2)
				tf.setText("mouse double click..."+count++);
				//System.out.println("mouse click..."+count++);
				//System.out.println(e);
				}

	});
}
			/**
			* @param args
			*/
			public static void main(String[] args) {
			new MouseAndKeyDemo();
			}
}
</span>
网络编程
IP简述使用

<span style="font-size:18px;">package cn.itcast.net.p1.ip;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IPDemo {
/**
* @param args
* @throws UnknownHostException 
*/
		public static void main(String[] args) throws UnknownHostException {
		//获取本地主机ip地址对象。
			InetAddress ip= InetAddress.getLocalHost();
		//获取其他主机的ip地址对象。
			ip = InetAddress.getByName("192.168.1.110");
		//InetAddress.getByName("my_think");
			System.out.println(ip.getHostAddress());
			System.out.println(ip.getHostName());
	}
}</span><span style="font-size:24px;"><strong>
</strong></span>
使用UDP建立信息发送端
<pre name="code" class="java">package cn.itcast.net.p2.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPSendDemo {
/**
* @param args
* @throws IOException 
*/
		public static void main(String[] args) throws IOException {
				System.out.println("发送端启动......");
				/*
				* 创建UDP传输的发送端。
				* 思路:
				* 1,建立udp的socket服务。
				* 2,将要发送的数据封装到数据包中。
				* 3,通过udp的socket服务将数据包发送出去。
				* 4,关闭socket服务。
				*/
				//1,udpsocket服务。使用DatagramSocket对象。
				DatagramSocket ds = new DatagramSocket(8888);
				//2,将要发送的数据封装到数据包中。
				String str = "udp传输演示:哥们来了!";
				//使用DatagramPacket将数据封装到的该对象包中。
				byte[] buf = str.getBytes();
				DatagramPacket dp = 
				new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);
			
 
使用UDP建立信息接收端 

package cn.itcast.net.p2.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceDemo {
/**
* @param args
* @throws IOException 
*/
		public static void main(String[] args) throws IOException {
				System.out.println("接收端启动......");
				/*
				* 建立UDP接收端的思路。
				* 1,建立udp socket服务,因为是要接收数据,必须要明确一个端口号。
				* 2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析这些数据.
				* 3,使用socket服务的receive方法将接收的数据存储到数据包中。
				* 4,通过数据包的方法解析数据包中的数据。
				* 5,关闭资源
				*/
				//1,建立udp socket服务。
				DatagramSocket ds = new DatagramSocket(10000);
				//2,创建数据包。
				byte[] buf = new byte[1024];
				DatagramPacket dp = new DatagramPacket(buf,buf.length);
				//3,使用接收方法将数据存储到数据包中。
				ds.receive(dp);//阻塞式的。
				//4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。
				String ip = dp.getAddress().getHostAddress();
				int port = dp.getPort();
				String text = new String(dp.getData(),0,dp.getLength());
				System.out.println(ip+":"+port+":"+text);
				//5,关闭资源。
				ds.close();
		}
}<strong>
</strong>
使用UDP建立信息交互方式
(信息发送端)
package cn.itcast.net.p2.udp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSendDemo2 {
/**
* @param args
* @throws IOException 
*/
		public static void main(String[] args) throws IOException {
			System.out.println("发送端启动......");
			/*
			* 创建UDP传输的发送端。
			* 思路:
			* 1,建立udp的socket服务。
			* 2,将要发送的数据封装到数据包中。
			* 3,通过udp的socket服务将数据包发送出去。
			* 4,关闭socket服务。
			*/
			//1,udpsocket服务。使用DatagramSocket对象。
			DatagramSocket ds= new DatagramSocket(8888);
			//String str = "udp传输演示:哥们来了!";
			BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
			String line = null;
			while((line=bufr.readLine())!=null){
					byte[] buf = line.getBytes();
					DatagramPacket dp = 
					new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);
					ds.send(dp);
					if("886".equals(line))
					break;
					}

			//4,关闭资源。
			ds.close();
			}
}
(信息接收端)
package cn.itcast.net.p2.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceDemo2 {
/**
* @param args
* @throws IOException 
*/
public static void main(String[] args) throws IOException {
			System.out.println("接收端启动......");
/*
* 建立UDP接收端的思路。
* 1,建立udp socket服务,因为是要接收数据,必须要明确一个端口号。
* 2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析这些数据.
* 3,使用socket服务的receive方法将接收的数据存储到数据包中。
* 4,通过数据包的方法解析数据包中的数据。
* 5,关闭资源
*/
//1,建立udp socket服务。
			DatagramSocket ds = new DatagramSocket(10000);
			while(true){
				//2,创建数据包。
				byte[] buf = new byte[1024];
				DatagramPacket dp = new DatagramPacket(buf,buf.length);
				//3,使用接收方法将数据存储到数据包中。
				ds.receive(dp);//阻塞式的。
				//4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。
				String ip = dp.getAddress().getHostAddress();
				int port = dp.getPort();283 

				String text = new String(dp.getData(),0,dp.getLength());
				System.out.println(ip+":"+port+":"+text);
				}
			//5,关闭资源。
			//ds.close();
			}
}
使用TCP建立客户端

ackage cn.itcast.net.p4.tcp;
 
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
/**
* @param args
* @throws IOException 
* @throws UnknownHostException 
*/
		publicstatic void main(String[] args) throws UnknownHostException, IOException {
//客户端发数据到服务端286 

/*
* Tcp传输,客户端建立的过程。
* 1,创建tcp客户端socket服务。使用的是Socket对象。
* 建议该对象一创建就明确目的地。要连接的主机。
* 2,如果连接建立成功,说明数据传输通道已建立。
* 该通道就是socket流,是底层建立好的。既然是流,说明这里既有输入,又有输出。
* 想要输入或者输出流对象,可以找Socket来获取。
* 可以通过getOutputStream(),和getInputStream()来获取两个字节流。
* 3,使用输出流,将数据写出。
* 4,关闭资源。
*/
				//创建客户端socket服务。
				Socket socket = new Socket("192.168.1.100",10002);
				//获取socket流中的输出流。
				OutputStream out =socket.getOutputStream();
				//使用输出流将指定的数据写出去。
				out.write("tcp演示:哥们又来了!".getBytes());
				//关闭资源。
				socket.close();
				}
}
使用TCP建立服务端
package cn.itcast.net.p4.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
/**
* @param args
* @throws IOException 
*/
		public static void main(String[] args) throws IOException {
//服务端接收客户端发送过来的数据,并打印在控制台上。
/*
* 建立tcp服务端的思路:
* 1,创建服务端socket服务。通过ServerSocket对象。287 

* 2,服务端必须对外提供一个端口,否则客户端无法连接。
* 3,获取连接过来的客户端对象。
* 4,通过客户端对象获取socket流读取客户端发来的数据
* 并打印在控制台上。
* 5,关闭资源。关客户端,关服务端。
*/
				//1创建服务端对象。
				ServerSocket ss = new ServerSocket(10002);
				//2,获取连接过来的客户端对象。
				Socket s = ss.accept();//阻塞式.
				String ip = s.getInetAddress().getHostAddress();
				//3,通过socket对象获取输入流,要读取客户端发来的数据
				InputStream in = s.getInputStream();
				byte[] buf = new byte[1024];
				int len = in.read(buf);
				String text = new String(buf,0,len);
				System.out.println(ip+":"+text);
				s.close();
				ss.close();
				}
}
使用TCP建立交互方式
(客户端)
package cn.itcast.net.p4.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo2 {
/**
* @param args
* @throws IOException 
* @throws UnknownHostException 
*/

		public static void main(String[] args) throws UnknownHostException, IOException {
//客户端发数据到服务端
/*
* Tcp传输,客户端建立的过程。
* 1,创建tcp客户端socket服务。使用的是Socket对象。
* 建议该对象一创建就明确目的地。要连接的主机。
* 2,如果连接建立成功,说明数据传输通道已建立。
* 该通道就是socket流,是底层建立好的。既然是流,说明这里既有输入,又有输出。
* 想要输入或者输出流对象,可以找Socket来获取。
* 可以通过getOutputStream(),和getInputStream()来获取两个字节流。
* 3,使用输出流,将数据写出。
* 4,关闭资源。
*/
			Socket socket = new Socket("192.168.1.100",10002);
			OutputStream out = socket.getOutputStream();
			out.write("tcp演示:哥们又来了!".getBytes());
			//读取服务端返回的数据,使用socket读取流。
			InputStream in = socket.getInputStream();
			byte[] buf = new byte[1024];
			int len = in.read(buf);
			String  text = new String(buf,0,len);
			 
			System.out.println(text);
			//关闭资源。
			socket.close();
			}
}
 
(服务端)
package cn.itcast.net.p4.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo2 {289 

/**
* @param args
* @throws IOException 
*/
			public static void main(String[] args) throws IOException {
//服务端接收客户端发送过来的数据,并打印在控制台上。
/*
* 建立tcp服务端的思路:
* 1,创建服务端socket服务。通过ServerSocket对象。
* 2,服务端必须对外提供一个端口,否则客户端无法连接。
* 3,获取连接过来的客户端对象。
* 4,通过客户端对象获取socket流读取客户端发来的数据
* 并打印在控制台上。
* 5,关闭资源。关客户端,关服务端。
*/
					//1创建服务端对象。
					ServerSocket ss = new ServerSocket(10002);
					//2,获取连接过来的客户端对象。
					Socket s = ss.accept();
					String ip = s.getInetAddress().getHostAddress();
					//3,通过socket对象获取输入流,要读取客户端发来的数据
					InputStream in = s.getInputStream();
					byte[] buf = new byte[1024];
					int len = in.read(buf);
					String text = new String(buf,0,len);
					System.out.println(ip+":"+text);
					//使用客户端socket对象的输出流给客户端返回数据
					OutputStream out = s.getOutputStream();
					out.write("收到".getBytes());
					s.close();
					ss.close();
					}
}

最常见的客户端:

浏览器:IE

最常见的服务端:

服务器:Tomcat

为了了解其原理:

自定义服务端,使用已有的客户端IE,了解一下客户端给服务端发了什么请求?

发送的请求是:

GET / HTTP/1.1  请求行请求方式/myweb/1.html请求的资源路径http协议版本。

请求消息头. 属性名:属性值

Accept: image/gif,image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash,

application/vnd.ms-excel, application/vnd.ms-powerpoint,application/msword, */*

Accept: */*    

Accept-Language: zh-cn,zu;q=0.5

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1; SV1;InfoPath.2)

Host: 192.168.1.100:9090

//Host: www.huyouni.com:9090

Connection: Keep-Alive

//空行

//请求体。

//服务端发回应答消息。

HTTP/1.1 200 OK   //应答行,http的协议版本应答状态码应答状态描述信息

应答消息属性信息。属性名:属性值

Server: Apache-Coyote/1.1

ETag:W/"199-1323480176984"

Last-Modified:Sat, 10 Dec201101:22:56 GMT

Content-Type: text/html

Content-Length: 199

Date: Fri, 11 May 2012 07:51:39GMT

Connection: close

//空行

//应答体。

<html>303

 

<head>

<title>这是我的网页</title>

</head>

<body>

<h1>欢迎光临</h1>

<font size='5'color="red">这是一个tomcat服务器中的资源。是一个html网页。</font>

</body>

</html>

--------------------------------------------------------------------------------

网络结构,

1,C/S  client/server

特点:

该结构的软件,客户端和服务端都需要编写。

可发成本较高,维护较为麻烦。

好处:

客户端在本地可以分担一部分运算。

2,B/S  browser/server

特点:

该结构的软件,只开发服务器端,不开发客户端,因为客户端直接由浏览器取代。

开发成本相对低,维护更为简单。

缺点:所有运算都要在服务端完成。






---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值