网络编程



网络编程

网络类型

OSI参考类型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层

TCP/IP参考模型:应用层,传输层,网际层,主机至网络层

 

网络通讯要素

IP地址

端口号

传输协议

 

A主机向B主机发送信息

1.找到对方IP

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

3.定义通讯规则。这个通讯规则成为协议。国际组织定义了通用协议TCP/IP

 

IP地址

网络中设备的标识

不易记忆,可用主机名

本地回环地址:127.0.0.1,主机名称:localhost

 

端口号

用于识别进程的逻辑地址,不同进程的标识

有效端口:0-65535,其中0-1024系统使用或保留端口

 

传输协议

通讯的规则

常见协议:TCP/UDP

net包用于描述IP的对象为InetAddress

 

TCPUDP区别:

UDP:

将数据及源和目的封装成数据包,不需要建立连接

每个数据报的大小限制在64k

因无连接,是不可靠协议

不需要建立连接,速度快

TCP:

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

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

通过三次握手完成连接,是可靠协议

必须建立连接,效率会稍低

 

Socket就是为网络服务提供的一种限制

通信的两端都有Socket

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

数据在两个Socket间通过IO传输

 

UDP传输:

DatagramSocket:此类用来表示发送和接受数据包的套接字

DatagramPacket用来实现无连接包投递服务,每条报文仅根据该包中的信息从一台机器路由到另一台机器

 

UDP传输:

1.建立udpsocket服务

2.提供数据,并将数据封装到数据包中

3.通过socket服务发送出去,将数据包发出去

4.关闭资源

 

实例:

package ch15;

import java.net.*;

import java.io.*;

public class Test3 {

public static void main(String[]args)throws Exception

{

//创建upd socket,建立端点

DatagramSocket ds=new DatagramSocket();

BufferedReade bf=new BufferedReader(new InputStreamReader(System.in));

String line=null;

while((line=bf.readLine())!=null)

{

if(line.equals("886"))//判断键盘录入是否结束

break;

//将输入字符串转化为字节数组

byte[] by=line.getBytes();

//确定数据并封装成数据包

DatagramPacket dp=new DatagramPacket(by,by.length,InetAddress.getByName("127.0.0.1"),10001);

//通过socket服务,将已有的数据包发送出去,通过send()方法

ds.send(dp);

}

ds.close();//关闭资源

}

 

}

 

UDP接收:

1.定义udpsocket服务,通常会监听一个端口,其实就是给这个接收网络应用程序定义一个数字标识,方便于明确哪些数据过来该应用程序可以处理。

2.定义一个数据包,因为要存储接收到的字节数据。因为数据包对象中有更多功能可以提取字节数据中不同的数据信息

3.通过socket服务的receive方法将接收到的数据存入已定义好的数据包中

4.通过数据包对象的特有功能,将这些不同的数据取出,打印到控制台上

5.关闭资源

 

实例:

package ch15;

import java.net.*;

public class Test4 {

public static void main(String[]args)throws Exception{

//创建upd socket,建立端点

DatagramSocket ds=new DatagramSocket(10001);

while(true)

{

//定义数据包,用于存储数据

byte[] by=new byte[1024];

DatagramPacket dp=new DatagramPacket(by,by.length);

//通过服务的receive()方法将收到的数据存入数据包中

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

ds.close();//关闭资源

}

}

}

 

 

TCP传输

SocketServerSocket

建立客户端和服务器端

建立连接后,通过Socket中的IO流进行数据传输

关闭Socket

 

TCP发送(客户端)

通过查阅socket对象,发现在该对象建立时,就可以去连接指定主机。

因为tcp是面向对象连接的。

1.创建Socket服务,并指定要连接的主机和端口。

2.客户端如果要发送数据,那么用客户端对象获取输出流。客户端如果要接收数据,那么用客户端对象获取输入流。

3.关闭客户端。

 

实例:

package ch15;

import java.net.*;

import java.io.*;

public class Test5 {

public static void main(String[]args)throws Exception

{

//创建客户端的socket服务,指定目的主机和端口

Socket s=new Socket("127.0.0.1",10002);

//为了发送数据,应该获取socket流中的输出流

OutputStream out=s.getOutputStream();

out.write("ni hao ma".getBytes());

s.close();

}

 

}

 

TCP服务端

1.建立服务端的socket服务---ServerSocket。并监听一个端口。

2.获取连接过来的客户端对象。通过ServerSocketaccept方法。

3.客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取该客户端对象的读取流来读取发过来的数据,并打印在控制台。

4.关闭服务器。

 

实例:

package ch15;

import java.net.*;

import java.io.*;

public class Test6 {

public static void main(String[]args)throws Exception

{

//建立服务端socket服务,并监听一个端口

ServerSocket ss=new ServerSocket(10002);

//通过accept方法获取连接过来的客户端对象

Socket s=ss.accept();

//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据

InputStream in=s.getInputStream();

byte[] by=new byte[1024];

int len=in.read(by);

System.out.print(new String(by,0,len));

ss.close();

}

 

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值