首页 > 代码库 > java网络编程之TCP实例

java网络编程之TCP实例

 

Dgram类

package Socket;import java.net.DatagramPacket;import java.net.InetAddress;public class Dgram {    public static DatagramPacket toDatagram(String s, InetAddress destIA,            int destPort) {        byte[] buf = new byte[s.length() + 1];        s.getBytes(0, s.length(), buf, 0);        return new DatagramPacket(buf, buf.length, destIA, destPort);    }    public static String toString(DatagramPacket p) {        return new String(p.getData(), 0, p.getLength());    }}

 

MultiJabberServer
package Socket;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;class ServeOneJabber extends Thread {    private Socket socket;    private BufferedReader in;    private PrintWriter out;    public ServeOneJabber(Socket s) throws IOException {        socket = s;        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(                socket.getOutputStream())), true);        start();    }    public void run() {        try {            while (true) {                String str = in.readLine();                if (str.equals("END"))                    break;                System.out.println("Echoing:" + str);                out.println("From Server:"+str);            }            System.out.println("closing...");        } catch (IOException e) {        } finally {            try {                socket.close();            } catch (Exception e2) {            }        }    }}public class MultiJabberServer {    static final int PORT = 8080;    public static void main(String[] args) throws IOException {        ServerSocket s = new ServerSocket(PORT);        System.out.println("Server Started");        try {            while (true) {                Socket socket = s.accept();                try {                    new ServeOneJabber(socket);                } catch (IOException e) {                    socket.close();                }            }        } finally {            s.close();        }    }}

 

MultiJabberClient
package Socket;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.InetAddress;import java.net.Socket;class JabberClientThread extends Thread {    private Socket socket;    private BufferedReader in;    private PrintWriter out;    private static int counter = 0;    private int id = counter++;    private static int threadcount = 0;    public static int threadCount() {        return threadcount;    }    public JabberClientThread(InetAddress addr) {        System.out.println("Making client " + id);        threadcount++;        try {            socket = new Socket(addr, MultiJabberServer.PORT);        } catch (IOException e) {        }        try {            in = new BufferedReader(new InputStreamReader(                    socket.getInputStream()));            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(                    socket.getOutputStream())), true);            start();        } catch (IOException e) {            try {                socket.close();            } catch (IOException e2) {            }        }    }    public void run() {        try {            for (int i = 0; i < 25; i++) {                out.println("Client " + id + ":" + i);                String str = in.readLine();                System.out.println(str);            }            out.println("END");        } catch (IOException e) {        } finally {            try {                socket.close();            } catch (IOException e2) {                threadcount--;            }        }    }}public class MultiJabberClient {    static final int MAX_THREADS = 40;    public static void main(String[] args) throws IOException,            InterruptedException {        InetAddress addr = InetAddress.getByName(null);        while (true) {            if (JabberClientThread.threadCount() < MAX_THREADS)                new JabberClientThread(addr);            Thread.currentThread().sleep(100);        }    }}