网络编程

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流!  ----------------------

网络编程

1.TCP和UDP

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

问:TCP和UDP有什么区别:

答:1)        TCP协议:属于可靠的连接,在发送数据报之前建立连接,采用三次握手原则,可以保证数据能够完整的传输到目的地,因而传输速度也会比较慢。

       2)        UDP协议:属于不可靠的连接,发送数据包之前不会建立连接,不会保证数据报到没到达目的地。

(1)UDP:
  a、将数据及源和目的封装成数据包,不需要建立连接
  b、每个数据包的大小限制在64K内
  c、因无连接,是不可靠协议
  d、不需要建立连接,速度快
 (2)TCP:
  a、建立连接,形成传输数据的通道
  b、在连接中进行大数据量传输
  c、通过三次握手完成连接,是可靠协议
  d、必须建立连接,效率会稍低

2.Socket

■Socket就是为网络服务提供的一种机制

■通信的两端都有Socket

■网络通信其实就是Socket间的通信

■数据字两个Socket间通过IO传输

 

1)UDP传输

●DatagramSocket与DatagramPacket

●建立发送端,接受端

●建立数据包

●调用Socket的发送接收方法

●关闭Socket

发送端与接收端是两个独立的运行程序。

 

根据上面的基本思路,我们就可以建立一个UDP基础服务

1.1)发送端

    a.创建UDP服务,通过DatagramSocket对象

DatagramSocket ds=new DatagramSocket();

    b.确定数据,并封装成数据包

byte[] buf="UDP,have a try".getBytes();

DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);

    c.通过socket服务,将已有的数据包发送出去。

ds.send(dp);

    d.关闭资源

ds.close();

 

1.2)接收端

     a.定义接收服务,建立端点

DatagramSocket ds=new DatagramSocket(10000);

     b.定义数据包,存储接收数据

byte[] buf=new byte[1024];

DatagramPacket dp=new  DatagramPacket(buf,buf.length)

     c.通过服务的receive方法将收到数据存入数据包中

ds.receive();

      d.通过数据包的方法获取其中的数据

String ip=dp.getAddress().getHostAddress();

int port=dp.getPort();

String dps=new String(dp.getData(),0,dp.getLength());

System.out.println(ip);

System.out.println(port);

System.out.println(dps);

       e.关闭服务

ds.close();

 

我们只需要对上面程序,小小改动一下,就能接发多次。同时我们要求多人交互,加上线程控制。

发送类

 

class Send implements Runnable

{

private DatagramSocket ds;

public Send(DatagramSocket ds)

{

    this.ds=ds;
}

//实现run方法

        public void run(){

             try{                  

Scanner scan=new Scanner(System.in);

String line=null;

//循环发送,除非从控制台接收到"886",否则一直发送

while((line=buf.readLine())!=null)

{

    if("886".equals(line))

        break;

byte[] buf=line.getBytes();

          DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);

     ds.send(dp);

}

}catch(IOException e)

{e.printStackTrace();}

ds.close();

}


接收类

class Rece implements Runnable

{

private DatagramSocket ds;

public Rece(DatagramSocket ds)

{       this.ds=ds;

}

 

public void run()

{

try

{

while(true)

{

          byte[] buf=new byte[1024];

          DatagramPacket dp=new DatagramPacket(buf,buf.length);

          ds.receive(dp);

          String ip=dp.getHostAdress().getHostName();

          int port=dp.getPort();

          System.out.println(ip+":"+dp.getData(0,dp.getLength());

}


主程序

class ChassDemo

{

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

{

DatagramSocket sendSocket=new DatagramSocket();

DatagramSocket receiveSocket=new DatagramSocket(10000);

new Thread(new Rece(receiveSocket)).start();

new Thread(new Send(sendSocket)).start();

}


 

2)TCP传输

TCP传输有2个对象,客户端是Socket,服务端是ServerSocket,同样的,我们也可以建立TCP服务

客户端

a.创建客户端的socket服务

Socket s=new Socket("127.0.0.1",10000);

b.为了发送数据,应该获取socket流中的输出流,为了接受输入,应该获取socket的输入流

 OutputStream out=s.getOutputStream();

 out.write("customer'.getBytes);

 InputStream in=s.getInputStream();

  in.println();

c.关闭资源

  s.close();

 

服务端

a.创建服务端的ServerSocket服务

ServerSocket ss=new ServerSocket(10000);

b.通过accept方法后去连接过来的客户端对象

Socket s=ss.accept();

c.获取客户端的数据

InputStream in=s.getInputStream();

byte[] buf=new byte[1024];

int len=in.read(buf);

String ip=s.getInetAdress().getHostName();

System.out.println(ip+""+new String(buf,0,len);

d.关闭客户端

s.close()

 

通过对上面的代码进行小小改变,也能实现TCP的多次交互,加上多线程,就能多人聊天了

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流!  ----------------------    

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值