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

黑马程序员—java基础_网络编程

2015-05-10 00:21 441 查看
-------
android培训、java培训、期待与您交流! ----------

1.网络模型:

OSI参考模型:7层

TCP/IP模型:4层

2.网络通讯要素

IP地址:网络中设备的标识,不易记忆,可用主机名,本地回环地址:127.0.0.1,主机名:localhost

InetAddress ia=InetAddress.getByName(“192.168.1.1”);获取主机的地址

ia.getHostAddress(); ia.getHostName();

端口号:用于标识进程的逻辑地址,不同进程的标识;有效端口号:0-65535,其中0-1024系统使用或保留端口。

传输协议:TCP/UDP

3.TCP和UDP区别

UDP:不需要建立连接,每个数据包的大小限制在64k以内,不可靠协议,速度块。(聊天、网络视频)

TCP:需要建立连接,进行大数据量的传输,通过三次握手完成连接,是可靠协议,速度稍微慢。(下载)

4.Socket

Socket就是网络服务提供的一种机制;通信的两端都有Socket;网络通讯其实就是Socket间的通信;数据在两个Socket间通过IO传输。

5.UDP传输

发送端

1.建立udpSocket服务

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

3.通过Socket服务的发送功能,将数据包发出去

4.关闭资源。

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpSend {

/**
* @param args
*/
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
DatagramSocket ds=new DatagramSocket();//创建UDPSocket服务通过DatagramSocket对象

byte[] data="我来了".getBytes();//字符串变成字节数组

//将数据封装成数据包
DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName("192.168.1.1"),4000);

ds.send(dp);//通过socket服务,将已有的数据包发送出去

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

}


接收端

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

2.定义一个数据包,存储接收到的字节数据。

3.通过socket服务的接收功能,将收到的数据存入定义好的数据包中

4.通过数据包对象功能,将数据取出

5.关闭资源。

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpReceive {

/**
* @param args
*/
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
DatagramSocket ds=new DatagramSocket(4000);//创建udpSocket通过DatagramSocket对象

//定义数据包用于存储接收的数据
byte[] data=new byte[1024];
DatagramPacket dp=new DatagramPacket(data,data.length);

//通过received方法将数据存入数据包中
ds.receive(dp);

//通过数据包中的方法获取数据
String ip=dp.getAddress().getHostAddress();
String dat=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();

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

}

6.TCP传输

客户端

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

2.获取Socket流中的输出流发送数据,通过write方法写入要发送的内容

3.获取Socket流中的输入流接收数据,通过read方法读取接收的内容

4.关闭资源

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TcpClient {

/**
* @param args
*/
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
Socket s=new Socket("192.168.1.1",4001);//创建客户端的Socket服务,指定目的主机和端口

OutputStream out=s.getOutputStream();//获取Socket流中的输出流发送数据
out.write("wo lai le".getBytes());//写入要发送的数据

InputStream in=s.getInputStream();//获取Socket流中接收的数据流
//读取服务端发送的数据
byte[] buf=new byte[1024];
int len=0;
while((len=in.read(buf))!=-1)
{
System.out.println(new String(buf,0,len));
}

s.close();//关闭资源
}

}


服务端

1.建立服务端的Socket服务:ServerSocket(),并监听一个端口

2.获取连接过来的客户端信息:accept方法,阻塞式

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

4.关闭服务端(可选操作)

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerSocket {

/**
* @param args
*/
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
//建立服务端的Socket服务,并监听一个端口
ServerSocket ss=new ServerSocket(4001);

Socket s=ss.accept();//通过accept方法获取连接过来的客户端对象
String ip=s.getInetAddress().getHostAddress();//获取IP地址

//获取客户端发送过来的数据,使用客户端对象的读取流来读取数据
InputStream in=s.getInputStream();

byte[] buf=new byte[1024];
int len=0;
while((len=in.read(buf))!=-1)
{
String str=new String(buf,0,len);
System.out.println(str);
}
s.close();//关闭客户端
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: