java_Socket

TCP:TCP在网络通讯上面具备顽强的生命力,例如远程链接(Telnet)和文件传输(FTP)都须要不定长度的数据被可靠地传输,可是这种可靠的传输是须要付出代价的,由于对数据内容正确性的检验占用计算机处理时间和网络宽带,一次TCP效率不及UDP。java

TCP:可靠,无大小限制,可是须要链接创建时间,差错控制开销大。网络


UDP:UDP操做简单,仅须要较少的监护,所以一般应用于局域网高可靠性的分散系统的Server/Client应用程序,例如视频会议系统,并不须要彻底保证数据的绝对准确性,只须要保持连贯便可,这种状况下,显然UDP要更合理一些。经常使用在交互实时性高的系统上面,如网路游戏,视频会议。.net

UDP:不可靠,有大小限制,64KB如下,不须要创建链接,差错控制开销小。code



Server:视频

package com.wangbiao.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class Server {

    // server
    public static void server() throws Exception {

        ServerSocket server = new ServerSocket(8888);
        String message = "hello everyone";
        System.out.println("Server is up.waiting for connect");
        Socket client = server.accept();
        // OutputStream out=client.getOutputStream();
        // byte[] b=new byte[1024];
        // out.write(b);
        // System.out.println(new String(b,0,b.length));
        PrintStream ps = new PrintStream(client.getOutputStream());
        ps.println(message);
        ps.close();
        client.close();
        server.close();
    }

    // server chat with client
    public static void server_chat() throws Exception {

        ServerSocket server = new ServerSocket(8888);
        Socket client = null;
        BufferedReader in = null;
        PrintStream out = null;
        boolean working = true;
        boolean flag = true;
        while (working) {
            System.out.println("Server is waiting for connect");
            client = server.accept();
            in = new BufferedReader(new InputStreamReader(
                    client.getInputStream()));
            out = new PrintStream(client.getOutputStream());

            while (flag) {
                String str = in.readLine();
                if (null == str || "".equals(str)) {
                    flag = false;
                } else {
                    if ("bye".equals(str)) {
                        flag = false;
                    } else {
                        System.out.println("Cient:" + str);
                        out.println("Server:" + str);
                    }
                }
            }

        }

        in.close();
        out.close();
        client.close();
        server.close();
    }

    // UDP
    public static void send_message() throws Exception {
        DatagramPacket dp=null;
        DatagramSocket ds=null;
        
        String content="hello UDP";
        ds=new DatagramSocket(3000);
        dp=new DatagramPacket(content.getBytes(),content.length(),InetAddress.getByName("localhost"),9000);
        
        ds.send(dp);
        
        ds.close();
    }

    public static void main(String[] args) throws Exception {
        // server();
        //server_chat();
        send_message();
    }
}


Client:server

package com.wangbiao.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

    // client
    public static void client() throws Exception {

        Socket client = new Socket("localhost", 8888);
        String str = "test";
        BufferedReader br = new BufferedReader(new InputStreamReader(
                client.getInputStream()));
        String content = br.readLine();
        System.out.println(content);
        br.close();
        client.close();
    }

    // server chat with client
    public static void client_chat() throws Exception {

        Socket client = new Socket("localhost", 8888);
        BufferedReader input = new BufferedReader(new InputStreamReader(
                System.in));
        BufferedReader in = new BufferedReader(new InputStreamReader(
                client.getInputStream()));
        PrintStream out = new PrintStream(client.getOutputStream());
        boolean flag = true;
        while (flag) {
            String str = input.readLine();
            out.println(str);
            if ("bye".equals(str)) {
                flag = false;
            } else {
                String mess=in.readLine();
                System.out.println(mess);
            }
        }
        in.close();
        out.close();
        client.close();
    }

    
    // UDP
    public static void receive_message() throws Exception {
        DatagramPacket dp=null;
        DatagramSocket ds=null;
        byte[] b=new byte[1024];
        ds=new DatagramSocket(9000);
        dp=new DatagramPacket(b, 1024);
        ds.receive(dp);
        System.out.println("waiting for server message");
        String content=dp.getAddress().getHostAddress()+"-"+new String(dp.getData());
        System.out.println(content);
        ds.close();
        
        
    }
    public static void main(String[] args) throws Exception {
        //client();
        //client_chat();
        receive_message();
    }

}
相关文章
相关标签/搜索