黑马程序员--07--网络编程技术

黑马程序员--07--网络编程技术
                                                         -------  android培训 java培训 、期待与您交流! ----------

网络模型:
OSI参考模型
TCP/IP参考模型
图片 

网络通讯要素:
IP地址
端口号
传输协议

IP(Internet Protocol)地址:
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:locallhost
IPV4用4个字节(IPV6用16个字节),也就是32位的二进制来表示。
192.168.1.255为广播地址。

端口(Port):
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65534,其中0~1024系统使用或保留的端口,用户一般使用1024以上的端口避免与系统服务的端口冲突。
HTTP常用80端口,FTP常用21端口。
传输协议:
通讯的规则
常见协议:TCP,UDP

TCP与UDP的特点:
TCP(Transmission Conctrol Protocol):
建立连接,形成传输数据的通道。
在连接中进行大数据量传输。
通过三次握手完成连接(发送方请求建立连接、接收方确认、发送方再确认),是可靠协议。
必须建立连接,效率会稍低。
(适用于下载、打电话等)

UDP(User Datagram Protocol):
将数据及源和目的封装成数据包中,不需要建立连接。
每个数据报的大小限制在64k内
因无连接,是不可靠协议,UDP报文可能会出现丢失、重复、失序等现象。
不需要建立连接,速度快。
(适用于聊天、桌面共享等)
Socket(套接字):
Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。

DNS(Domain Name Server):
DNS(域名服务器)是用来解析IP地址用的服务器,当输入的网址访问服务器时会先去DNS服务器找网址所对应的IP地址,然后再访问DNS返回的IP地址连接到该服务器。

hosts文件的用途:
1、访问服务器时先在本机的hosts文件中查找网址所对应的IP地址,如果在本机的hosts中没有找到对应的IP地址就会到DNS服务器查找,我们可以通过修改主机里面的hosts文件提高访问服务器时的速度。
2、可以通过修改hosts屏蔽垃圾网站。
3、可以通过修改hosts文件禁止某程序的软件联网更新。

TCP程序设计:
服务器端与客户端的交互:
1、服务器程序创建一个ServerSocket,调用accept()方法等待客户机来连接。
2、客户端程序创建一个Socket,请求与服务器建立连接。
3、服务器接收客户机的连接请求,同时创建一个新的Socket与客户建立连接。服务器继续等待新的请求。

//TCP客户端演示

import java.net.*;
import java.io.*;

class TCPClient
{
public static void main(String args[])throws Exception
{
//创建一个连接服务器的套接字,指定目的地和端口
Socket s = new Socket("172.16.31.23",8888);
//调用套接字的getOutputStream()方法获取一个输出流,用于发送数据。
OutputStream os = s.getOutputStream();
//创建一个对象读取从服务器接收到的数据
InputStream is = s.getInputStream();
//将数据发送给服务端
os.write("Hello".getBytes());
//定义一个存数据的缓冲区
byte[] buf = new byte[1024];
//读取数据
int len = is.read(buf);
//打印数据
System.out.print(new String(buf,0,len));
//关闭流
os.close();
}
}


//TCP服务端演示

import java.net.*;
import java.io.*;
class TCPServer
{
public static void main(String args[])throws Exception
{
//创建一个服务端套接字,并监听一个端口
ServerSocket sc = new ServerSocket(8888);
//利用accept()方法等待客户端连接,并将客户端的对象传递给client
Socket client = sc.accept();
//打印出已经连接的IP地址
System.out.println(client.getInetAddress().getHostAddress()+".....Connected");
//读取接收的数据。
InputStream is  = client.getInputStream();
//创建一个发送数据的对象
OutputStream os = client.getOutputStream();
//定义一个存数据的缓冲区
byte[] buf = new byte[1024];
//读取数据
int len = is.read(buf);
//打印数据
System.out.print(new String(buf,0,len));
//发送数据
os.write("date recrived!".getBytes());
//关闭流
os.close();
//服务端是否关闭需要看情况
}
}








UDP程序设计:
发送数据包:
1、使用DatagramSocket()创建一个数据包套接字。
2、使用DatagramPacket()创建要发送的数据包。
3、使用DatagramSocket类的send()方法发送数据包。
4、关闭资源。
接收数据包:
1、使用DatagramSocket()创建数据包套接字,绑定到指定的端口。
2、使用DatagramPacket()创建字节数组来接收数据包。
3、使用DatagramPacket类的receive()方法接收UDP包。
4、关闭资源。

//UDP发送数据演示

import java.net.*;

class UDPSend
{
public static void main(String args[])throws Exception
{
//创建一个接收和发送的套接字
DatagramSocket udp = new DatagramSocket();
//创建一个保存数据的缓冲区
byte []buf ="data!".getBytes();
//创建要发送的数据包DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10000);
//发送数据
udp.send(dp);
udp.close();
}
}

//UDP接收数据演示

import java.net.*;

class UDPReceive
{
public static void main(String args[])throws Exception
{
//创建一个接收和发送的套接字
DatagramSocket udp = new DatagramSocket(10000);
//创建一个保存数据的缓冲区
byte[] buf = new byte[10];
//创建要接收数据的数据包DatagramPacket(byte[] buf, int offset, int length)
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//接收数据
udp.receive(dp);
//将接受的数据输出到控制台
for(byte b : buf)
System.out.print((char)b);
udp.close();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值