java基础 Java网络总结

1 网络通信的本质是进程间通信。   

2 Tcp协议和UDP协议
TCP:开销大,用于可靠性要求高的场合。
TCP的过程相当于打电话的过程
UDP:用在对实时性要求比较高的场合。
UDP的过程相当于写信的过程。

注意:socket是套接字,ip和port(端口号 0~65535个端口,一个端口只能有一个进程)

3,  TCP通信机制,tcp是面向连接的,实现多线程的方法有三个

① 为每个客户分配一个工作线程。

②  创建一个线程池,由其中的工作线程来为客户服务。

③  利用JDK的Java类库中现成的线程池,由它的工作线程来为客户服务。

下面以为每个客户分配一个工作线程来实现多线程


在服务端

import java.net.*;

import java.io.*;

public class TCPServer2 {

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

      ServerSocket ss=newServerSocket(9000);//端口号

      while(true){

           Socket s=ss.accept();//连接监听客户端

           System.out.println(s.getInetAddress());

           Thread t=newServerThread(s);//实现多线程连接

           t.start();

      }

   }

}

class ServerThread extends Thread{//分配线程

   Socket s;

   public ServerThread(Socket s){

      this.s=s;

   }

public void run(){

   try {

      OutputStreamos=s.getOutputStream();//在网络中获取输出流

      PrintWriter out=newPrintWriter(os);

      for(int i=1;i<=30;i++){

      out.println("Hello"+i);//通过网络发消息给客户端

      out.flush();

      Thread.sleep(1000);

           }

      } catch (Exception e) {

           e.printStackTrace();

      }

      finally{

           try {

                 s.close();//注意关闭线程而不关闭流

           } catch (IOException e) {

                 e.printStackTrace();

           }

      }

   }

}

 

 

在客户端

import java.net.*;

import java.io.*;

public class TCPClient {

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

Socket s=new Socket("192.168.0.10",9000);//连接服务端的ip和端口

      InputStream is=s.getInputStream();//获得输入流,读取服务端发来的信息

      InputStreamReader ir=newInputStreamReader(is);

      BufferedReader in=newBufferedReader(ir);

      for(int i=1;i<=30;i++){

           System.out.println(in.readLine());

      }

      s.close();

   }

}

 

4,  Udp 面向无连接,不可靠,效率高,资源占用少 ,先从客户端发起通信,让服务端知道其地址等信息,不同的协议其端口号的含义也不一样


例子:

在客户端

import java.net.*;

public class UDPClient {

publicstatic void main(String[] args) throws Exception{

DatagramSocket ds=new DatagramSocket();注册邮箱

String text1="I am here!";

byte[] bs1=text1.getBytes();//转换成字节用来传输

DatagramPacket letter1=new DatagramPacket(

bs1,0,bs1.length,InetAddress.getLocalHost(),9000);

//写好信(地址和内容)

      ds.send(letter1);//发信     

DatagramPacket letter2=new DatagramPacket(

                      newbyte[100],0,100);

//准备空信用来接受服务端的信

      ds.receive(letter2);//收信

      byte[] data=letter2.getData();//得到信的内容

      int offset=letter2.getOffset();

      int length=letter2.getLength();

   String str=newString(data,offset,length);//转换成字符串读取    

      System.out.println(str);

      ds.close();

      }

}


 

在服务端

import java.net.*;

public class UDPServer {

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

DatagramSocket ds=new DatagramSocket(9000);//服务端口

      while (true) {

      byte[] bs1 = new byte[100];

      DatagramPacket letter1 = newDatagramPacket(bs1, 0, bs1.length);//制作空信封用来收信

      ds.receive(letter1);

      InetAddress address =letter1.getAddress();

      int port = letter1.getPort();

      String str = "北京2008年举行奥运会";

      byte[] bs2 = str.getBytes();

DatagramPacket letter2 = new DatagramPacket(bs2, 0, bs2.length,address,port);//获得客户端的ip和port然后将信息发给客户端

      ds.send(letter2);

           }          

           

      }


 

 


 

DatagramSocket,相当是邮箱有send(发消息)receive(收消息)

DatagramPacket,相当是信,里面有ip端口,信息内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值