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