java笔记—网络通信socket的例子
2016-06-15 00:00
666 查看
Java Socket应用 网络通信 【 socket 】
第一节:网络基础知识第二节:InetAddress 类:
此类表示互联网协议 (IP) 地址。
InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。
例子:
package inetaddreaa; import java.net.InetAddress; import java.net.UnknownHostException; public class InetAddressDom { public static void main(String[] args) { try { //根据本机 InetAddreaa 获取信息 InetAddress address = InetAddress.getLocalHost(); System.out.println("本机名字:" + address.getHostName()); System.out.println("IP地址:" + address.getHostAddress()); System.out.println("对象的原始 IP地址:"+address.getAddress()); //看API文档 } catch (UnknownHostException e) { e.printStackTrace(); } } }
第三节:URL常用使用方法:
理解:URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名。
协议为: http (超文本传输协议)。
资源:www.imooc.com
端口:8080
例子:
package url; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; public class URLDom { public static void main(String[] args) { try { //实例化URL URL url= new URL("http://www.baidu.com"); //输入流 InputStream is = url.openStream(); //将输入流转换为字符流 InputStreamReader isr = new InputStreamReader(is,"utf-8"); //为字符流添加缓冲流 BufferedReader br = new BufferedReader(isr); //读取数据 String date = br.readLine(); //输出 行 while( date != null ){ System.out.println(date); date=br.readLine(); } //关闭资源 br.close(); isr.close(); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
第四节:TCP 编程 【 传输控制协议 】
概念:传输层,以字节流的方式发送数据。
是一种面向连接的、可靠的、基于字节流的传输层通信协议。
服务器端【ServerSocket】
1.创建服务器端,并制定绑定端口。
2.调用 accept() 方法调用 accept() 方法侦听并接受的连接。
3.获取输入流,并读取客户端信息。
4.获取输出流,向客户端端发送信息 。
5.先关闭输入流,关闭资源。
客户端【Socket】
1.创建客户端,制定服务器地址和端口 。
2.获取输出流,向服务器端发送信息 。
3.获取输入流,并读取服务器信息。
4.先关闭输出流,流关闭资源。
TCP 编程之多线程连接:
基本步骤:
1.服务器端创建ServerSocket,循环调用accept() 等待客户端连接。
2.客户端很粗昂贱一个socket并请求和服务器端连接。
3.服务器端接受客户端的请求,创建socket与客户端建立专线连接。
4.建立连接的两个socket在一个单独的线程上对话。
5.服务器端需继续等待新的连接。
例子:
1、服务器端
package tcp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { //1创建服务器,并制定绑定端口 ServerSocket ss = new ServerSocket(8080); //2调用accept()方法侦听并接受的连接。 System.out.println("***服务器已经启动,等待客户端连接***"); Socket sk = ss.accept(); //3获取输入流,获取客户端信息 InputStream is = sk.getInputStream(); //转换字符流 InputStreamReader isr = new InputStreamReader(is); //4为输入流添加缓冲 BufferedReader br = new BufferedReader(isr); //输出 String io=null; //5获取客户端信息 while( (io=br.readLine()) != null){ System.out.println("我是服务器,然后客户端说:" + io); io=br.readLine(); } //关闭输入流 sk.shutdownInput(); //获取输出流,向客户端发送信息 OutputStream ops= sk.getOutputStream(); //打印流 PrintWriter pw = new PrintWriter(ops); pw.write("您好!欢迎您!"); //清空缓冲区数据 pw.flush(); //关闭资源 ops.close(); pw.close(); br.close(); isr.close(); is.close(); sk.close(); ss.close(); } catch (IOException e) { e.printStackTrace(); } } }
2、客户端
package tcp; import java.io.*; import java.net.*; //还有一种就是和多线程结合在一起 public class ServerConter { public static void main(String[] args) { try { //创建客户端Socket,指定服务器端口,地址 Socket sr = new Socket("localhost",8080); //获取输出流,向服务器发送信息 OutputStream ops = sr.getOutputStream(); //打印流 PrintWriter pw = new PrintWriter(ops); //字符输出流 pw.write("用户名:陈郑游;密码:123"); //清空缓冲区数据 pw.flush(); //关闭输出流 sr.shutdownOutput(); //获取输入流,读取服务器的信息 InputStream ips = sr.getInputStream(); //InputStreamReader isr = new InputStreamReader(ips); BufferedReader buf = new BufferedReader(new InputStreamReader(ips)); String io=null; //获取客户端信息 while( (io=buf.readLine()) != null){ System.out.println("我是客户端,然后服务器说:" + io); io=buf.readLine(); } //关闭资源 ips.close(); buf.close(); pw.close(); ops.close(); sr.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
第五节:UDP 编程
理解:UDP协议是无连接,不可靠,无序的。
DategramPacket:数据包
DataGrmSocket:进行通信到端口的通信的类
实现步骤:
服务器端:
1,创建DatagramSocket,指定端口号。
2,创建DatagramPacket。
3,接受客户端发送的数据信息。
4,读取客户端数据。
5,关闭资源。
客户端:
1,定义服务器的地址,端口号,数据,发送信息。
2,创建DatagramPacket,包含将要发送的信息。
3,创建DatagramSocket。
4,向服务器端发送数据。
5,关闭资源。
例子:
1、服务器端
package udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class Server { public static void main(String args[]){ try { /*接收客户端响应*/ //1,创建DatagramSocket,指定端口号。 DatagramSocket socket = new DatagramSocket(8888); //2,创建DatagramPacket。 byte date[] = new byte[1020]; DatagramPacket packet = new DatagramPacket(date, date.length); System.out.println("***服务器已经启动,等待客户端连接***"); //3,接受客户端发送的数据信息。 socket.receive(packet); //接收之前一直堵塞 //4,读取数据。 String info = new String(date, 0, packet.getLength()); System.out.println("我是服务器,客户端说:" + info); // socket.close(); /*向客户端发送响应*/ //1,定义客户端的地址,端口号,数据,发送信息。 InetAddress iass = packet.getAddress(); //地址 int port=8888; byte date2[] ="服务器说:欢迎您!".getBytes(); //转换为字节数组 //2,创建DatagramPacket,包含将要发送的信息。 DatagramPacket packet1 = new DatagramPacket(date2, date2.length, iass, port); //3,创建DatagramSocket。 DatagramSocket soc = new DatagramSocket(); //4,向客户端端发送数据。 soc.send(packet1); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
2、客户端
package udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class Socket { public static void main(String[] args) { try { /*向服务器端发送响应*/ //1,定义服务器的地址,端口号,数据, InetAddress inet =InetAddress.getByName("localhost"); //地址 int port=8888; byte date1[] ="用户名:小游;密码:888".getBytes(); //转换为字节数组 //2,创建DatagramPacket,包含将要发送的信息。 DatagramPacket packet = new DatagramPacket(date1, date1.length, inet, port); //3,创建DatagramSocket。 DatagramSocket socket = new DatagramSocket(); //4,向服务器端发送数据。 socket.send(packet); /*接收服务器端的响应*/ byte date2[] = new byte[1020]; //1,创建DatagramPacket。 DatagramPacket packet2 = new DatagramPacket(date2, date2.length); //2,接受服务器端发送的数据信息。 socket.receive(packet2); //3,读取数据。 String info2 = new String(date2, 0, packet2.getLength()); System.out.println("我是客户端,服务器说:" + info2); //4,关闭资源 socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- 如何将数据库引擎配置为侦听多个 TCP 端口
- SQL SERVER 2012、2014网络配置
- tomcat7+jdk的keytool生成证书 配置https
- (五):网络协议
- (六):TCP的连接建立与释放过程
- elementaryOS如何解决网易云音乐一直报网络错误
- 根据系统状态栏判断网络状态
- ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver
- HttpClient的使用,整理了一个工具类
- 【网络编程3】Java组播套接字
- Python网络数据采集
- 读《TCPL》- 介绍
- linux网络编程----->线程同步-->互斥量和读写锁
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)
- python之basic加密http下载
- C# Http Get 提交请求
- VMWare虚拟机下RedHat 9.0linux的网络设置
- 理解OAuth 2.0
- Httpclient远程调用WebService示例
- thrift使用http并部署到iis