关闭

黑马程序员Java基础之网络编程(net)

848人阅读 评论(0) 收藏 举报

---------------------- android培训java培训、期待与您交流! ----------------------

 终于写到自己想写的章节了,早就看到报道出某某知名国际网站被国人入侵,对这些牛人很是钦佩。我很爱国,可没有能力实际行动,这些牛人靠自己的网络技术替国人出了口恶气。他们嫉恶如仇,可以“轻轻的来,轻轻的去,在你的后台留下我的标记”但却不是善恶不分,他们可以做黑客同样可以是红客成为网络安全的守护神。闲话少说,千里之行始于足下,先来看看基础要点。。。

基础要点

1UPDTCP

UPD:不需链接所以速度快,同样因为无连接所以不可靠,每个数据包大小限制在64k内。

TCP:需三次握手建立链接所以效率会稍低,但是可靠协议,可进行大数据传输

2、用于UPD网络编程的套接字(又叫自寻址套接字)

DatagramSocket类和DatagramPacket类

3、用于TCP网络编程的套接字(又叫流套接字)

ServerSocket类和Socket类,区别是前者只能用于服务器端,而后者无此限制。 

先写个接受和发送UPD的例子:

package horse;
import java.io.*;
import java.net.*;
/**这是一个udp接受端
 */
public class UDPReceive {
	public static void main(String[] args) throws Exception {
		//创建接受socket对象
		DatagramSocket socket = new DatagramSocket(1026);
		while(true){
			byte[] bu = new byte[1026];
			//创建数据包保存传来的数据
			DatagramPacket packet = new DatagramPacket(bu,bu.length);
			//接受数据到packet对象
			socket.receive(packet);
			//获取对方的ip
			String ip = packet.getAddress().getHostAddress();
			//得到对方数据
			String data = new String(packet.getData(),0,packet.getLength());
			System.out.println(ip+":"+data);
		}
	}
}

 

下面是UPD的发送端

package horse;

import java.io.*;

import java.net.*;

/**这是一个udp发送端

 */

publicclass UDPSend {  

    publicstaticvoid main(String[] args) throws Exception {

       //创建发送端DatagramSocket对象

       DatagramSocket socket = new DatagramSocket();

       //包装标准字节输入流

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

       String line = null;

       while(null!=(line=br.readLine())){

           byte[] bu = line.getBytes();

           //数据打包发送

           DatagramPacket packet = new DatagramPacket(bu,bu.length,InetAddress.getByName("localhost"),1026);

           socket.send(packet);

       }

       socket.close();

    }

}

在举一个tcp方面的例子:

package horse;
import java.net.*;
import java.io.*;
/**这是一个客户端
 * @param args
 */
public class ClientTCP {
	public static void main(String[] args) throws Exception {
		// 创建客户端Socket对象,其中有主机、端口参数
		Socket socket = new Socket("localhost",1025);
		//获取客户端输出流
		OutputStream os = socket.getOutputStream();
		os.write("asdf".getBytes());
		//os.write((System.in).getBytes());
		//获取客户端输入流
		InputStream is = socket.getInputStream();
		//定义接受字符的长度
		byte[] buf = new byte[1024];
		int length =is.read(buf);
		System.out.println(new String(buf,0,length));
		//关闭Socketd对象释放资源
		socket.close();
	}
}

下面是tcp的接收端

package horse;
import java.io.*;
import java.net.*;
/**这是一个tcp的接收端
 * @param args
 */
public class ServerTCP {	
	public static void main(String[] args) throws Exception {
		//建立服务端ServerSocket对象,监听一个端口
		ServerSocket ss = new ServerSocket(1025);
		//获取连接过来的客户端对象
		Socket socket = ss.accept();
		//获取客户端的输入流对象
		InputStream is = socket.getInputStream();
		byte[] bu = new byte[1024];
		int length = is.read(bu);
		System.out.println(new String(bu,0,length));
		//获取客户端输出流
		OutputStream os = socket.getOutputStream();
		os.write("fdsa".getBytes());
		//关闭连接过来的socket对象,是否资源
		socket.close();		
	}
}

感受:这里在写程序时出现了一点问题,就是得抛异常,刚开始我没抛结果红的触目惊心全错!后来写上throws Exception就好多了。异常和网络编程还有I/O流是结合使用的,在写上两方面的例子时,多要抛异常。不得不说JAVA这个机制真人性化,总有做不到的事情,那怎么办呢?抛异常吧!人不一样吗,做不到就先不做了留到以后再说,总有一天会醍醐灌顶的。。。要是总自己搂着怎么能楼得住呢?所以呢,也很感谢黑马提供论坛这个平台,能够让我们把自己搂不住的问题提出来在这里得到答案。

 ---------------------- android培训java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:40464次
    • 积分:897
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:11篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论