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

网络编程

2014-03-01 14:57 197 查看

网络编程
网络类型
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
 
TCP与UDP区别:
UDP:
将数据及源和目的封装成数据包,不需要建立连接
每个数据报的大小限制在64k内
因无连接,是不可靠协议
不需要建立连接,速度快
TCP:
建立连接,形成传输数据的通道
在连接中进行大数据量传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率会稍低
 
Socket就是为网
155da
络服务提供的一种限制
通信的两端都有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传输
Socket和ServerSocket
建立客户端和服务器端
建立连接后,通过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.获取连接过来的客户端对象。通过ServerSocket的accept方法。
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();
}
 
}
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: