Java网络编程之TCP

时间:2022-12-18 07:32:57

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);
}
}
}



          有什么问题可以给我留言。

          我的微博http://weibo.com/laokuzai  安卓派,关注android最新资讯

          微信:zhuj8989,加微信畅聊android技术