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

原创 2012年03月28日 16:19:05

---------------------- 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

不可不懂的.NET基础知识

刚开始接触.NET很疑惑,看完视频也不是太懂,通过总结和反复,从概括和概念入手,慢慢变得清晰了。这篇博客主要是我对.NET基础知识的了解,算作积累吧。 .NET框架体系结构 由四个主要部分...
  • zhuanzhe117
  • zhuanzhe117
  • 2013年05月21日 13:39
  • 5310

ASP.NET基础面试题

1. 重 载(Overload ) 和覆写(override) 的区别 答: 方法重载:当类包含两个名称相同但签名不同( 方 法名相同, 参数列表不相同) 的方法时发生方法重载。用方法重载来提供在语义...
  • RunAtWorld
  • RunAtWorld
  • 2016年02月16日 17:02
  • 961

.Net基本语法学习(1)

.Net基本语法学习(1)
  • persistentA
  • persistentA
  • 2016年07月14日 23:14
  • 397

.Net基础体系和跨框架开发普及

.net体系经过十几年发展,发生了很多变化。特别是在最近两年,随着开源和跨平台的发展,衍生出很多概念,像标准库,可移植库,.Net Core等,相信有不少同学对他们之间的关系是有一些困惑的,这里我从基...
  • oyuk06cm
  • oyuk06cm
  • 2017年02月11日 18:55
  • 776

黑马程序员—[.Net就业薪资] 四个班100%就业,.Net学科称霸黑马

文章来源:黑马程序员,黑马论坛 [.Net就业薪资] 四个班100%就业,.Net学科称霸黑马 四个班100%就业,.Net学科称霸黑马 作为.Net学科的就业指导老...
  • heima_88_0822
  • heima_88_0822
  • 2014年08月22日 19:03
  • 665

.NET基础加强第一天(1)

作为一个程序员基础太差,什么都不懂会被鄙视。慢慢学习吧
  • salafh
  • salafh
  • 2016年12月26日 18:00
  • 113

经典.net常用面试题目基础

1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private :   私有成员, 在类的内部才可以访问。      protec...
  • wybshyy
  • wybshyy
  • 2016年09月01日 21:23
  • 228

Java基础【.net对比学习】

基础语法 1)类名:首字母大写,其他拼接字母首字母大写 2)方法名:首字母小写,其他拼接字母首字母大写 3)文件名与类名必须一致 4)包名:所有都小写 5)常量:所有字母大写用下划线_隔开   关键词...
  • qq_38886614
  • qq_38886614
  • 2017年11月14日 09:55
  • 43

敢说你java基础很好吗?你能答对几个?(Java基础知识点整理)

1.熟悉IO相关接口和类,知道字符流和字节流的区别。 2.理解Java反射,并熟练使用反射解决问题。 3.理解泛型,并能熟练使用。知道的区别。 4.了解Collection、List、Map、Set之...
  • u014481156
  • u014481156
  • 2015年03月10日 21:40
  • 794

.net应该学什么怎么学---初学者必看

上篇《学了.Net做什么开发》中我讲到了目前.Net开发主要方向是Web开发,因此在本篇中我将主要讲解做Web开发要学哪些东西,怎么学,由于内容比较多,我将分几次发。下图是我推荐的学习内容和学习顺序(...
  • yayun0516
  • yayun0516
  • 2014年07月12日 14:19
  • 5738
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员Java基础之网络编程(net)
举报原因:
原因补充:

(最多只允许输入30个字)