网站首页 语言 会计 电脑 医学 资格证 职场 文艺体育 范文
当前位置:书香门第 > 计算机 > java语言

Java网络基础和Socket通信基础

栏目: java语言 / 发布于: / 人气:3.3W

导语:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。下面我们来看看Java网络基础和Socket通信基础,希望对大家有所帮助。

Java网络基础和Socket通信基础

一、网络基础

1、InetAddress

InetAddress构造器私有,可以通过多种方式获得inetAddress对象

InetAddress ip = ocalHost();//获取本机IP

ip = yName("");//通过名字获取指定地址IP

String name = ostName();//通过IP获取IP名字

2、URL统一资源定位符

典型构成:1、网络协议(http://);2、主机地址();3、端口号(80);4、资源路径(crm/);5、查询地址(gid=117)

//构造器多种,可以采用指定URL连接构造一个URL,也可以使协议,用端口号,文件名等信息构成URL

URL url = new URL(str);

String protocol = rotocol();// 获取协议

String host = ost();// 主机名

int port = ort();//端口号

对资源文件的一般操作

String file = ile();//获取资源中包含的文件名称

InputStream is = Stream();//打开此URL连接(URLConnection),并获取连接的输入流(utputStream())

对URL地址进行转码,解码,防止乱码

String str1 = de(str, "UTF-8");//对str字符串进行UTF-8转码

String str2 = de(str1, "UTF-8");//解码

3、HttpURLConnection

继承URLConnection类;Http协议简介 http是一个无状态协议,请求、响应协议由请求头和响应头构成 。

①请求头: 请求方法:get post put.....

②响应头 响应状态码:status code:200(正常响应) 400~(404,405请求资源异常,不存在,请求响应格式不一致) 500~(500服务器内部异常)

//利用HttpURL协议下载文件

String str3 = "/uploadfile/2017/0809/20170809085944351.jpg";

URL url2 = new URL(str3);

// 打开一个URL连接

HttpURLConnection conn = (HttpURLConnection) Connection();//获取一个连接(URLConnection)

// 设置请求方法

//equestMethod("GET");

// equestProperty("Accep-Language", "zh-en");

//eadTimeout(10000);// 设置读取超时时间,可以默认

// oInput(true);// 打开输入和输出,可以不设置,默认true

//oOutput(true);

//int code = esponseCode();// 获取响应状态码

// tln(code);

// 判断是否响应成功

if (code == _OK) {

InputStream is1 = nputStream();

FileOutputStream fileOutputStream = new FileOutputStream(new File("C:UserslxDesktoptestmn.jpg"));

BufferedInputStream bfi = new BufferedInputStream(is1);

BufferedOutputStream bfo = new BufferedOutputStream(fileOutputStream);

int len;

byte[] bs = new byte[1024];

while((len=(bs))!=-1){

e(bs, 0, len);

h();

}

}

二、Socket通讯:

1、TCP/IP

IP:InternetProtocol 网络协议,支撑主机之间通讯的基本协议,如果需要实现主机之间的消息安全传输,通常会结合TCP协议共同使用。全称为TCP/IP。都是传输层协议。

TCP:传输控制协议,能保证数据消息的在主机之间安全传输,三次握手,四次挥手。是一个安全传输数据协议,所以一般用于数据传输的准确性,安全性较高的应用,但是效率较低,如:视频通话。

C/S 架构: Client/Server 客户端/服务器模式

B/S 架构: Browser/Server浏览器/服务器模式

服务器端:

1、创建serverSocket,此套接字为服务器专用,构造器应当包含端口号,以供其他主机连接。

2、监听套接字,并获得连接:Socket socket = pt( );

3、获取套接字输出流:utputStream( );

ServerSocket serverSocket = new ServerSocket(9999);

tln("服务器开启");

while (true) {

Socket socket = pt();

tln("客户端已经连接" + netAddress());

PrintStream ps = new PrintStream(utputStream());

t("欢迎使用socket服务器");

}

客户端

1、利用构造器获取以供连接的套接字,属性包含目标IP和端口号

2、获取套接字里面的输入流:nputStreeam( );

Socket socket = new Socket("", 9999);

InputStreamReader isr = new InputStreamReader(nputStream());

BufferedReader br = new BufferedReader(isr);

String msg = Line();

tln(msg);

2、UDP

UDP:user datagram Protocol 用户数据协议,无法保证数据的安全性,但是可以提交数据传输的效。

接收数据:为阻塞式,需要单独作为一个线程

1、创建网络通道datagramSocket,应当是包含端口地址的构造器

2、创建数据包datagramPacket ,其中构造方法必须包含一个空的字符缓冲区,偏移量等信息。

3、通过iver(datagramPacket);接受数据,向数据包写入数据。

4、获取数据包内容 new String(ata() , ffset(),ength());

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

DatagramSocket datagramSocket = new DatagramSocket(2345);

byte[] b = new byte[1024];

while (true) {

DatagramPacket datagramPacket = new DatagramPacket(b, th);

ive(datagramPacket);//接受数据

String string = new String(ata(), ffset(),

ength());

tln("接受到的数据是" + string);

}

}

发送数据:

1、创建网络通道datagramSocket,构造器不需写入

2、创建数据包 datagramPacket,构造方法里面包含需要写入的字节数组,偏移量,目标地址,目标端口号,当然也可以通过set方式设置目标地址地址等信息

3、发送数据报 (datagramPacket);

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

//创建一个网络通道

DatagramSocket datagramSocket = new DatagramSocket();

//将数据打包成数据报包

String message="nnnnnn";

DatagramPacket datagramPacket = new DatagramPacket(

ytes(), ytes()th,

yName(""),

2345);

(datagramPacket);

e();

}

3、UDP多播广播

发送数据:

1、创建多播广播通道 new MulticastSocket( );

2、获取组播地址并将广播加入此地址 Group( yName("") );

3、构建datagramPacket,包含byte[]的内容,byte[]长度,ip,端口号。当然可以不用在构建方法添加ip和端口号。

4、发送消息:(datagramPacket);

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

MulticastSocket multicastSocket = new MulticastSocket();

InetAddress group = yName("");

Group(group);

String content = "刷屏100遍";

DatagramPacket dp = new DatagramPacket(ytes(),ytes()th);

ddress(group);

ort(2426);

(dp);

}

接收数据:阻塞式,需要单独作为一个线程

1、创建多播广播通道:new MuliticastSocket(2426); 构造方法应当包含开启的端口号

2、获取广播地址,并加入此广播地址 Group(yName(""));

3、创建你个空的[]数组。和一个datdagramPacke对象。包含btye[]相关信息

4、接收数据:ive(datagramPacket);

5、读取datagramPacket内容:利用String的构造方法

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

MulticastSocket ms= new MulticastSocket(2426);

InetAddress group = yName("");

Group(group);

byte[] b = new byte[1024];

while (true) {

DatagramPacket datagramPacket = new DatagramPacket(b, th);

ive(datagramPacket);//接受数据

String string = new String(ata(), ffset(),

ength());

tln(ddress()+"" + string);

}

4、NIO

NIO是jdk1.4之后引入的一套全新的IO API,处理数据的方式不同于传统IO,传统IO的处理数据的方式以字节为单位,而NIO是一个Buffer(数据块) 为单位,传统IO属于阻塞式(流在读取数据时如果未读到时,程序会处于阻塞状态);而NIO的处理的方式为非阻塞式方式允许(底层为信号通讯),NIO可以在单线程应用中处理多个客户请求。

Tags:JAVA socket 通信