六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 37|回复: 0

java的基本语法(七)

[复制链接]

升级  66%

39

主题

39

主题

39

主题

秀才

Rank: 2

积分
149
 楼主| 发表于 2013-1-15 02:20:44 | 显示全部楼层 |阅读模式

第十章  网络编程
1.      参考模型:
 
OSI 参考模型  应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
TCP/IP参考模型:应用层  传输层   网络层  物理+数据链路层
 
2IP  提供了独一无二唯一的IP地址。
 
3TCP协议和UDP协议:
 
(1)TCP(transmission  control  protocol)   可靠的()
 是专门用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议,他是一种面向连接的协议,TCP连接是字节流而非报文流。    银行ATM
(2)UDP(user  data  protocol)           不可靠的()
UDP向应用程序提供了一种发送封装的原始IP数据报的方法、并且发送时无需建立连接,是一种不可靠的连接。             CS
 
4.Sockct  先启动Server  再启动Clinet
   两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket
   Socket 通常用来实现client-server 连接。
   Java.net 包中定义的两个类Socket ServerSocket,分别用来实现双向连接的clientserver端。
   建立连接时所需的寻址信息为原创计算机的IP地址和端口号(Port  number
TCP端口
UDP端口   每一个65536个端口
 
程序1TCPClient.java

import java.net.*;
import java.io.*;
public class TCPClient{
              public static void main(String[] args)throws  Exception{
Socket s = new Socket("127.0.0.1",6666);  //指定IP地址,连接到Server(本机),指向6666端口(Server)Client端口系统默认
                     OutputStream os = s.getOutputStream();
                     DataOutputStream dos = new DataOutputStream(os);
                     dos.writeUTF("Hello Server!");
                     dos.flush();
                     dos.close();
                     s.close();
              }
}
 

TCPServer.java

import java.net.*;
import java.io.*;
public class TCPServer{
              public static void main(String[] args)throws Exception{
                     ServerSocket ss = new ServerSocket(6666);       //监听6666端口
                     while(true){
  Socket s1 = ss.accept();  //Client建立一个连接,接受Client端,s1专门与Clients进行连接,
                      Thread.sleep(3000);//睡眠3秒钟
                       System.out.println("A client connection");//输出连接成功
                       DataInputStream dis = new DataInputStream(s1.getInputStream());
                       System.out.println(dis.readUTF());
                       dis.close();
                       s1.close();
                 }
              }
}
 
 
TCP Socket 通信模型

 
 
程序2:点对点聊天程序 TtServer.java

import java.io.*;
import java.net.*;
 
public class TServer{
       public static void main(String[] args){
              try{
                     ServerSocket server = null;
                     try{
                            server = new ServerSocket(8899);      
                     }catch(Exception e){e.printStackTrace();}
                     Socket socket = null;
                     try{
                            socket = server.accept();      
                     }catch(Exception e){e.printStackTrace();}
                     String line;
                     BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                     PrintWriter os = new PrintWriter(socket.getOutputStream());
                     BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
                     System.out.println("Client:" + is.readLine());
                     line = sin.readLine();
                     while(!line.equals("bye")){
                            os.println(line);      
                            os.flush();
                            System.out.println("服务器端(Server):" + line);
                            System.out.println("客户端(Client):" + is.readLine());
                            line = sin.readLine();
                     }
                     is.close();
                     os.close();
                     socket.close();
                     server.close();
              }catch(Exception e){System.out.println("出错了,你没有用Bye退出"+ e);}
       }    
}
 

 

 

 

 

 

TClient.java

import java.io.*;
import java.net.*;
 
public class TClient{
       public static void main(String[] args){
              try{
                     Socket socket = new Socket("127.0.0.1",8899);
                     BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
                     PrintWriter os = new PrintWriter(socket.getOutputStream());
                            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                     String readline;
                   readline = sin.readLine();
                     while(!readline.equals("bye")){
                        os.println(readline);
                        os.flush();
                        System.out.println("客户端(Client):" + readline);
                        System.out.println("服务器端(Server):" + is.readLine());
                        readline = sin.readLine();
                     }
                     os.close();
                     is.close();
                     socket.close();                    
              }catch(Exception e){e.printStackTrace();}
       }    
}
 
UDP :不可靠的,效率高,数据报/非连接    (音频,视频)
DatagramPacket 数据报包
DatagramSocket: 用来发送和接收数据报包的套接字
------------------------------------------------------------------------------------------------------------------
 

例如:TestUDPClient.java

 
import java.net.*;
 
public class TestUDPClient{
       public static void main(String[] args)throws Exception{
 byte[] buf = (new String("Hello")).getBytes();  //new一个字符串”Hello“,返回baye类型,把一个字符串解析为一个字节数组
        
 DatagramPacket dp = new DatagramPacket(buf,buf.length,
                  new InetSocketAddress("127.0.0.1",5678));    //通过buf字节数组,把所有内容、//发出去,InetSocketAddress继承于 SocketAddress(包含IP端口的地址)(多态)
                                                    // 发送到 127.0.0.15678端口              
         DatagramSocket ds = new DatagramSocket(9999); //我用99995678发送数据
         ds.send(dp); //发送数据报包,对方收到了!
         ds.close(); //关闭
       }
}
 
 
import java.net.*;
public class TestUDPServer{
       public static void main(String[] args) throws Exception{
              byte buf[] = new byte[1024];       //定义一个byte数组,内存分配1024字节空间
DatagramPacket dp = new DatagramPacket(buf, buf.length); //定义一个数据报包,接受UDP的数据,实际是存在buf里面,占用整个buf空间
              DatagramSocket ds = new DatagramSocket(5678);  //占用udp5678端口
              while(true){
ds.receive(dp);    //开始收数据,把包袱传进来,只要有人发数据,把数据仍包袱里面。(阻塞式的方法)
System.out.println(new String(buf,0,dp.getLength()));       //String的构造方法,打印包袱里面所收的数据,可以知道到底收了多少个数据;从0开始到长度,打印出来。
              }
       }    
}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表