什么是网络? 网络是主机之间的数据的传输
第一点: 主机
IP地址 :用于定位主机
第二点: 程序
端口port:用于标识主机上的应用程序
第三点:规则–协议
Tcp:面向连接 打电话`确定连接成功后,必须的到回复,连接成功 三次握手
Udp:面向无连接 邮寄信件 只负责发送不管是否收到 效率快
2.java支持网络编程
基于TCP协议:打电话 ,下载
客户端和服务端
ServerSocket
Socket
B/S Browser/Server 游览器与服务端
C/S Client/Server 客户端与服务端
基于UDP协议:发邮件
DatagramSocket
DatagramPacket

Tcp客户端和服务端简单操作步骤
服务端
1.创建服务连接
2.当客户端发起连接请求,唤醒accept()方法,获取Socket对象
3.通过Socket对象,可以获取字节输入输出流
4.进行流操作
5.关闭服务和流
客户端
1.创建服务连接
2.通过Socket对象,可以获取字节输入输出流
3.进行流操作
4.关闭服务和流

UDP
发送端
1.创建服务
2.将要发送的数据打包成数据包
3.发送数据包
4.关闭服务和流
接收端
1.创建服务
2.用空的数据包接收数据
3.分析数据
4.关闭流和服务

下面是代码示例

package com.ds.homework;

import java.awt.datatransfer.StringSelection;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/** 
* @author 董硕: 
* @version 创建时间:2017年8月15日 下午10:01:24 
*  udp发送端
*/

public class SendClass {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        //建立udp服务
        DatagramSocket socket=new DatagramSocket();
        //要发送的数据,打成数据包
        String string="这是一个udp传输";
        DatagramPacket datagramPacket=new DatagramPacket(string.getBytes(),string.getBytes().length ,InetAddress.getByName("10.0.127.247" ), 6666); 
        //发送数据包给接收端
        socket.send(datagramPacket);
        //关闭服务
        socket.close();

    }
}
package com.ds.homework;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/** 
* @author 董硕: 
* @version 创建时间:2017年8月15日 下午10:13:02 
*  接收端 ,接收数据
*/

public class ReceiveClass {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        //建立接收端服务
        DatagramSocket datagramSocket=new DatagramSocket(6666);
        //创建一个空数据包来接收数据
        byte[]by=new byte[63];
        DatagramPacket datagramPacket=new DatagramPacket(by, by.length);
        //接收数据包
        datagramSocket.receive(datagramPacket);
        //将数据包内容打印到控制台上
        String string=new String(by, 0, datagramPacket.getLength());
        System.out.println(string);
        //关闭服务
        datagramSocket.close();

    }

}

下面是简单的利用TCP协议,编写的聊天程序,要求
通过TCP协议实现无限对话,然后存储到文件当中,chat.txt

package com.ds.homework;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/** 
* @author 董硕: 
* @version 创建时间:2017年8月15日 下午4:30:57 
*  通过TCP协议实现无限对话,然后存储到文件当中,chat.txt
*  在循环里面 有1.从控制台读取字符 2.发送给客户端 并写入文本中 3.显示客户端发送的文本
*/

public class ServerClass {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        ServerSocket serverSocket=new ServerSocket(12306);//tcp建立服务
        System.out.println("服务器等待客户连接.......");
        Socket socket=serverSocket.accept();//accept是阻塞方法
        System.out.println("连接成功");

        BufferedReader inputStreamReader=new BufferedReader(new InputStreamReader(System.in));
        BufferedReader inputStreamReader2=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//      BufferedWriter outputStreamWriter2=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        OutputStreamWriter outputStreamWriter2=new OutputStreamWriter(socket.getOutputStream());
        FileWriter fileWriter=new FileWriter("D:\\JAVA\\chat.txt",true);
        System.out.println("duqudao");
        while(true){
            //读取客户端发送的数据,并打印到控制台

            String string2=inputStreamReader2.readLine();

            System.out.println("客户端:"+string2+"ip地址"+socket.getInetAddress());

            //读取控制台输入的字符串
        String string=inputStreamReader.readLine();
        if("over".equals(string))
        {
            System.out.println("退出服务端");
            break;
        }
        //将控制台输入的数据发送给客户
        outputStreamWriter2.write(string+"\r\n");
//      outputStreamWriter2.newLine();
        outputStreamWriter2.flush();
        //并写入到文本中
        fileWriter.write("服务器:"+string+"\r\n");
        fileWriter.flush();

        }
        inputStreamReader.close();
        inputStreamReader2.close();
        fileWriter.close();
        outputStreamWriter2.close();
        socket.close();
    }

}
package com.ds.homework;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/** 
* @author 董硕: 
* @version 创建时间:2017年8月15日 下午5:20:50 
*  1.读取控制台字符串 2.读取服务器发送数据到控制台 3.将读取到的控制台字符串写入到文本中
*/

public class ClientClass {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        Socket socket=new Socket(InetAddress.getByName("10.0.127.247"), 12306);
        System.out.println("客户端建立连接");
        BufferedReader inputStreamReader=new BufferedReader(new InputStreamReader(System.in));
        OutputStreamWriter outputStreamWriter=new OutputStreamWriter(socket.getOutputStream());
        BufferedReader inputStreamReader2=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        FileWriter fileWriter=new FileWriter("D:\\JAVA\\chat.txt",true);
        while(true){

            System.out.println("客户请输入:");
        //读取控制台输入
        String string=inputStreamReader.readLine();

        if("over".equals(string))
        {
            System.out.println("客户端结束");
            break;
        }

        outputStreamWriter.write(string+"\r\n");
//      outputStreamWriter.newLine();
        outputStreamWriter.flush();
        //将控制台输入内容写入文本,并发给服务器

                fileWriter.write("客户端"+string+"\r\n");
                fileWriter.flush();
        //读取服务器端内容
                //System.out.println(string);
        String string2=inputStreamReader2.readLine();
        //将读到内容写到控制台
        System.out.println("服务器端:"+string2);



        }
        inputStreamReader.close();
        inputStreamReader2.close();
        outputStreamWriter.close();
        socket.close();
    }

}

java 实现虚拟号码打电话 java实现网络电话_udp


java 实现虚拟号码打电话 java实现网络电话_网络编程_02


java 实现虚拟号码打电话 java实现网络电话_java 实现虚拟号码打电话_03