您的位置:首页 > 理论基础 > 计算机网络

黑马程序员——网络编程

2015-07-17 13:37 453 查看


---------------Android培训java培训、期待与您交流---------------

网络编程

网络编程概述

网络编程就是将不同地理位置的计算机,通过IO流进行数据传递

一、网络模型



二、网络编程的三要素

1、IP地址(InetAddresss)

1、IP地址表示计算机在网络设备中的标识

2、不宜记忆,可以通过主机名来记

3、本机地址:127.0.0.1localhost

2、端口号

1、用于标识进行的逻辑地址

2、有效端口号:0--655360-1024为系统保留端口

3、传输协议

定义通讯的规则

三、IP地址

1、它是网络中的设备标识

2、不易记忆,可用主机名表示,两者存在映射关系

3、本机回环地址:127.0.0.1,主机名为:localhost。

IP地址:java中对应的是InetAddress类,存在于java.net包中。

IP地址分为5类:

A类 1.0.0.0 到126.0.0.0

0.0.0.0 和127.0.0.0保留

B类 128.1.0.0到191.254.0.0

C类 192.0.1.0 到223.255.254.0

D类 224.0.0.0到239.255.255.255用于多点广播

E类 240.0.0.0到255.255.255.254保留

255.255.255.255用于广播

InetAddress类

importjava.net.*;
class  IPDemo{
publicstatic void main(String[] args) throws UnknownHostException{
//通过名称(ip字符串or主机名)来获取一个ip对象。
InetAddress ip =InetAddress.getByName("www.baidu.com");
System.out.println("addr:"+ip.getHostAddress());
System.out.println("name:"+ip.getHostName());
}
}


四、网络编程UDP—TCP

UDP的特点:(面向无连接)

1、将数据源和目的封装到数据包中,不需要建立连接

2、每个数据包的大小限制在64K

3、无连接,是不可靠协议

4、无连接,速度快

TCP特点:(面向连接)

1、建立连接,形成传输数据的通道

2、在连接中进行大量数据传输

3、要经过三次捂手完成连接,是可靠协议

4、需要建立连接,速度慢

五、Socket(Socket也称套接字)

1、Socket是为网络通信提供的一种机制

2、通信的两端都有Socket

3、网络通信其实就是Socket间的通信

4、数据在Socket间通过IO传输

通信的步骤:

1,找到IP地址

2,数据要发送到对象指定应用程序,为标识这些应用程序,所以给这些网络应用程序都用数字标识,为方便称呼这个数字,叫做端口,即逻辑端口。

3,定义通信规则,称之为协议。国际组织定义了通用协议,即TCP/IP。

注意:必须要有数字标识(端口号)才能将数据发送到应用程序上。

UDP发送和接收端

UDP发送端

/*
* UDP发送数据
*/
/*
* 1、创建发送端Socket对象
* 		new DatagramSocket对象
* 2、将数据进行打包
* 		new DatagramPacket
* 3、发送数据
* 		send
* 4、关闭资源
* 		close
*/
public class UDPSocket {
public static void main(String args[]) throws IOException{
//创建UDP发送端Socket对象
DatagramSocket ds=new DatagramSocket();
String str="你好";
//因为数据打包,打包的是字节,所以讲字符串进行转换
byte [] b=str.getBytes();
//获取数据的长度
int len=b.length;
//封装目的地
InetAddress id=InetAddress.getByName("192.168.24.49");
//封装端口号
int port=8080;
//将数据,目的地,端口进行封装
DatagramPacket dp=new DatagramPacket(b,len,id,port);
//发送数据
ds.send(dp);
ds.close();
}
}


UDP接收端

/*
* 接收端
*/
/*
* 1、创建UDPSocket对象,并制定端口号
* 		new DatagramSocket(端口号)
* 2、创建接收端数据包,进行拆包
* 		new DatagramPacket
* 3、接受数据
* 		receive
* 4、关闭资源
*
*/
public class UDPReceive {
public static void main(String [] args) throws IOException{
//创建UDPSocket对象
DatagramSocket ds=new DatagramSocket(8080);
//定义数据包,接受数据,进行拆包
while(true){
byte [] b=new byte[1024];
DatagramPacket dp=new DatagramPacket(b,b.length);
//接受数据
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String data=new String (dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+":"+data+":"+port);
}
}
}


TCP发送和接收端

TCP发送端

/*
* TCP发送端
*/
/*
* 1、创建发送端Socket对象,并建立连接
* 2、创建字节写入流对象
* 3、写入数据
* 4、关闭资源
*/
public class ClientTCP {
public static void main(String args[]) throws IOException{
//创建发送端Socket对象
Socket s=new Socket("192.168.24.43",10086);
//创建写入流对象
OutputStream os=s.getOutputStream();
//写入数据
os.write("你好,我来了".getBytes());
//关闭资源
os.close();
}
}


TCP服务端

/*
* TCP服务端
*/
/*
* 1、创建服务端Socket对象
* 		new ServerSocet()
* 2、创建Socket对象用来监听接受端
* 		accept()
* 3、创建读取流,并获取数据
* 		getInputStream()
* 4、关闭资源
*/
public class ServerTCP {
public static void main(String [] args) throws IOException{
//创建服务端Socket对象
ServerSocket ss=new ServerSocket(10086);
//创建Socket对象,来监听接受端
Socket s=ss.accept();
//创建读取流对象getInputStream
InputStream is=s.getInputStream();
//定义一个字节数组用来读取数据
byte [] b=new byte[1024];
int len=is.read(b);
String str=new String(b,0,len);
System.out.println(str);
s.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: