黑马程序员-----网络编程学习日志

 

---------------------- android培训java培训、期待与您交流! -------------------------

 

网络编程的基础知识

网络协议TCP/IP
网络协议规定了计算机之间网络连接的遵守的规则,数据传输的方式和通道,数据发送冲突的解决办法等。

IP地址

IP地址就是计算机在网络中的唯一标识。本地环回地址:127.0.0.1 

ping 127.0.0.1可以查看本地TCP/IP协议是否正常。 
Port端口
在计算机网络程序运行中,在每一个接收/发送的数据包头部都包含有一个被称之为端口的部分,用以标识网络应用程序接收不同端口上的数据。同一台计算机中不能存在同时使用一个端口的两个程序运行。

即用于标识进程的逻辑地址,有效端口号的范围为0-65535之间,0-1024之间的端口数是系统使用或一些一些特定网络服务和应用。 

 

UDP与TCP

TCP-----传输控制协议(Transmission Control Protocol),是面向连接的通信协议。提供两台计算机可靠,无差错的数据传输。应用程序利用TCP进行数据传输时,数据源与接收目标之间会建立一个虚拟的连接。这样的连接一旦建立,数据源与接收目标就会将数据当作一个双向的字节流进行交换。

UDP-----用户数据报协议(User Datagram Protocol),是无连接的通信协议。UDP不保证数据的可靠传输。能够向若干个目标发送数据,和接收若干个发自于源的数据。源和目的并不会建立对话,收到数据的一方也不会回复确认,一台计算机如果接收到一条数据,也不会确认收到与否,因此其数据容易丢失。每个数据报的大小在64K以内。

Java网络编程的类(java.net.*)

TCP--Socket

Socket是网络驱动层提供给应用程序编程的机制,用于TCP通信的服务器和客户端。

可以把Socket比喻成是一个港口码头。应用程序把货物放到港口码头上,有着自己的IP和端口,通过IO完成货物的运送,目的港口也有自己的IP和端口用于建立这种连接。(getInputstream方法返回输入流;getOutputStream方法返回输出流)

ServerSocket类用于TCP通信的服务器端,调用accept方法等待对客户端连接的请求,不使用ServeerSocket时应调用close方法关闭。

TCP客户端程序与TCP服务器端程序的交互过程: 

(1)服务器程序创建一个ServerSocket,然后调用accept方法等待客户来连接。
(2)客户端程序创建一个Socket并请求与服务器建立连接。
(3)服务器接收客户的连接请求,并创建一个新的Socket与客户建立专线连接。
(4)建立了连接的两个Socket在一个单独的线程上对话。

 

UDP---DatagramSocket


send(DatagramPacket p)方法用于发送DatagramPacket。
receive(DatagramPacket p)方法用于接受DatagramPacket。

DatagramPacket 

封装数据用于实现无连接包的投递服务。
public DatagramPacket(byte[] buf,int length)
public DatagramPacket(byte[] buf,int length,InetAddress address,int port)

getInetAddress和getPort方法
getByName方法 
 

简单的UDP程序

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


public class UDPSender 


    public static void main(String[] args) throws Exception 
    { 
        DatagramSocket ds = new DatagramSocket();// 端口由系统自己分配   
        byte[] buf="miximixi".getBytes();         //String str = "miximixi"
        ds.send(new DatagramPacket(buf, buf.length(),  InetAddress.getByName("192.168.1.100"), 2014));  //str.getBytes()中文的话要str.getBytes().length
        ds.close(); 
        } 
}  
  
public class UDPRecv 

    public static void main(String[] args) throws Exception 
    { 
        DatagramSocket ds = new DatagramSocket(2014);
        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()); 
        int port =dp.getPort();
        System.out.println(ip + "::" + data + "::" + port); 
        ds.close(); 
        } 
}

 

 

TCP的C/S简单演示

 

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


public class ClientSendatext
 {  

    public static void main(String[] args) throws Exception { 
       
        Socket s = new Socket("192.168.1.127", 2014); 
        OutputStream os = s.getOutputStream();// 获得输出流  
        os.write("miximixi".getBytes()); 
        s.close(); 
    } 

 

public class Servertext
 
 { 

    public static void main(String[] args) throws Exception { 
      
        ServerSocket ss = new ServerSocket(2014);// 创建服务端  
        Socket s = ss.accept();// 等待获取连接的客户端  
        InputStream is = s.getInputStream();// 获得输入流  
        byte[] buf = new byte[1024]; 
        int len = is.read(buf); 
        System.out.println(new String(buf, 0, len));// 打印获得的信息  
        s.close(); 
        ss.close();
    } 

 

 

---------------------- android培训java培训、期待与您交流! -------------------------

详情查询:黑马训练营

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值