java自学笔记之网络编程

来源:互联网 发布:淘宝国际转运怎么开通 编辑:程序博客网 时间:2024/04/30 04:05

网络编程:

网络编程有两种实现方式:即通过TCP协议和UDP协议。

UDP:

属于不可靠的连接,发送数据包之前不会建立连接,不会保证数据报到没到达目的地。
1,面向无连接
2,数据会被封包,包体积有限制64K
3,不可靠
4,速度快
聊天,视频会议,桌面共享都可以作为UDP传输;

TCP:

属于可靠的连接,在发送数据报之前建立连接,采用三次握手原则,可以保证数据能够完整的传输到目的地,因而传输速度也会比较慢。
  1、建立连接,形成传输数据的通道
  2、在连接中进行大数据量传输
  3、通过三次握手完成连接,是可靠协议
  4、必须建立连接,效率会稍低

Socket:
网络通信其实就是Socket间传输;

UDP传输:

DatagramSocket 与DatagramPacket
DatagramSocket建立发送端和接收端的Socket;send(dp)和receive(dp)方法实现对数据的发送和接收;
DatagramPacket封装面向无连接的UDP数据包,构造函数:DatagramPacket(byte[] buf,int length,InetAddress address,int port)等;

udp的发送端:

1:建立udp的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。
2:明确要发送的具体数据。
3:将数据封装成了数据包。
4:用socket服务的send方法将数据包发送出去。
5:关闭资源。

udp的接收端:

1:创建udp的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。
2:定义数据包,用于存储接收到数据。
3:通过socket服务的接收方法将收到的数据存储到数据包中。
4:通过数据包的方法获取数据包中的具体数据内容,比如ip、端口、数据等等。
5:关闭资源。
/*编写一个聊天程序右手数据的部分和发数据的部分需要多线程同时执行一个线程控制接受,一个线程控制发送;*/import java.net.*;import java.io.*;class Send implements Runnable{private DatagramSocket ds;public Send(DatagramSocket ds){this.ds = ds;}public void run(){try{BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));String line = null;while ((line = bufr.readLine())!=null) {if (line.equals("youxiang")) {break;}byte[] buf = line.getBytes();DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),2000);ds.send(dp);}ds.close();}catch(Exception e){System.out.println("发送失败");}}}class Rece implements Runnable{private DatagramSocket ds;public Rece (DatagramSocket ds){this.ds = ds;}public void run (){try{byte [] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);ds.receive(dp);String ip = dp.getAddress().getHostAddress();String data = new String (dp.getData(),0,dp.getLength());System.out.println(ip+":"+data);}catch(Exception e){System.out.println("接受失败");}}}class ChatDemo{public static void main(String[] args) throws Exception{DatagramSocket sendSocket = new DatagramSocket();DatagramSocket receSocket = new DatagramSocket(2000);new Thread(new Send(sendSocket)).start();new Thread(new Rece(receSocket)).start();}}



TCP传输:

Socket与ServerSocket
Socket:建立客户端,  new Socket(地址,端口);
SeverSocket:建立服务器端,  newSeverSocket(端口)

TCP客户端:

1:建立tcp的socket服务,最好明确具体的地址和端口。
2:连接成功后,产生socket流。通过getInputStream和getOutputStream获取socket流中的读取流和写入流。
3:添加数据。
4:关闭资源。
class TcpClient2{public static void main(String[] args) throws Exception {Socket s = new Socket("127.0.0.1",4000);OutputStream  out = s.getOutputStream();out.write("hello Server".getBytes());InputStream in = s.getInputStream();byte [] buf = new byte[1024];int len = in.read(buf);String data= new String(buf,0,len);System.out.println(data);s.close();}}


TCP服务端:

1:创建服务端socket服务,并监听一个端口。
2:服务端通过accept()方法获取连接过来的客户端对象。
3:通过获取到的socket对象中的socket流和具体的客户端进行通讯。
4:关闭资源。
注意:要先关客户端,再关服务端。
class TcpServer2{public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(4000);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String data= new String (buf,0,len);System.out.println(ip+":"+data);OutputStream out = s.getOutputStream();out.write("hello client".getBytes());}}

URL封装和URLConection封装:

URL代表一个统一资源定位符,它是指向互联网“资源”的指针,资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用
例如:对数据库或搜索引擎的查询。

String getFile():获取此URL的文件名
String getHost():获取此URL的主机名(如果适用)
String getPath():获取此URL的路径部分
int getPort(): 获取此URL的端口号
String getProtocol():获取此URL的协议名称
String getQuery():获取此URL的查询部

class URLConnectionDemo{ public static void main(String[] args)throws Exception {  URL url=new URL("http://www.baidu.com");  URLConnection conn=url.openConnection();  InputStream in=conn.getInputStream();  byte[] buf=new byte[1024];  int len=in.read(buf);  System.out.println(new String(buf,0,len)); }}



0 0
原创粉丝点击