您好,欢迎访问一九零五行业门户网

如何用Java创建多线程局域网聊天室

1.tcp要实现局域网连接,就必须知道信息传输的原理。
在局域网里面传输的信息都是以包的形式,我使用的tcp包传输数据,tcp包里面封装了ip报文。
下面这句话就是通过一个静态ipv4协议的类得到一个服务器的ip地址。
address = inetaddress.getbyname(192.168.43.86);
2.套接字在tcp中得到了服务器的ip地址,但是光凭ip地址无法对具体应用进行锁定,所以引入了套接字这个概念。端口号用来锁定主机的进程。端口号一般取1024~49151,因为0 ~ 1023是熟知端口号,一般用于一些http等等常用的端口,49152 ~ 65535是临时端口号,也不能随机占用,一般是程序运行过程中的临时分配。
套接字=ip+端口号
这句话就是定义一个端口号9998和ip为192.168.43.86的套接字。
int port = 9998;socket = new socket(address,port);
3.c/s架构
从java类的角度看,服务器和客户端通过套接字连接抽象了一个连接。服务器通过建立自己的套接字端口并监听有无客户在此端口连接,实现信息的读取功能。客户机通过服务器约定好的端口号,来对服务器进行传输数据。在服务器开启后,运行客户机,将与服务器进行三次握手建立tcp连接,然后在此连接的基础上,实现客户机与服务器的通信。
4.多线程由于服务器可能同时服务多个对象,若是采用传统的方法进行服务器连接,则会出现多个客户机等待一个客户机与服务器交互的现象。为了解决这个问题,采用多线程的方法。
用supersocket类继承socket类并实现runnable接口,实现多线程运行。
class supersocket extends socket implements runnable
supersocket socket_1 = new supersocket(9999);supersocket socket_2 = new supersocket(9998);supersocket socket_3 = new supersocket(9997);thread s1 = new thread(socket_1);thread s2 = new thread(socket_2);thread s3 = new thread(socket_3);
5.服务器服务器的架构第三部分所示,代码实现如下
package tcp;import java.io.ioexception;import java.io.inputstream;import java.net.serversocket;import java.net.socket;import java.util.scanner;public class tcpserver2 {    public static void main(string[] args) {        scanner scan = new scanner(system.in);        //实例化具有多线程功能的服务器专用socket类        //需要传递端口号作为初始化变量        supersocket socket_1 = new supersocket(9996);        supersocket socket_2 = new supersocket(9998);        supersocket socket_3 = new supersocket(9997);        //建立三个子线程        thread s1 = new thread(socket_1);        thread s2 = new thread(socket_2);        thread s3 = new thread(socket_3);        try {            while(true) {             //开启线程                s1.start();                s2.start();                s3.start();                if(scan.next()==123){                //结束线程                    break;                }            }        } finally {            try {            //关闭套接字                socket_1.close();                socket_2.close();                socket_3.close();            } catch (ioexception e) {                e.printstacktrace();            }        }    }}class supersocket extends socket implements runnable{    inputstream is;    byte[] buffer;    socket socket=null;    serversocket serversocket=null;    public supersocket(int port){        try {        //初始服务器型套接字            serversocket = new serversocket(port);            buffer = new byte[1024];        } catch (ioexception e) {            e.printstacktrace();        }    }    @override    public void run() {        try {         //等待端口连接            socket = serversocket.accept();            //连接完成后创建输入流            is = socket.getinputstream();            //读取客户端传送信息            int len = is.read(buffer);            string str = new string(buffer, 0, len);            system.out.println(str);        } catch (ioexception e) {            e.printstacktrace();        }    }}
客户端
客户端的架构第三部分所示,代码实现如下
package tcp;import java.io.ioexception;import java.io.outputstream;import java.net.inetaddress;import java.net.socket;import java.net.unknownhostexception;import java.util.scanner;public class tcpclient {    public static void main(string[] args) {        inetaddress address=null;        socket socket=null;        outputstream os=null;        string message=null;        scanner sca=null;        try {            //得到本机ip地址            address = inetaddress.getbyname(192.168.43.86);            //规定端口号,建立套接字            int port = 9998;            socket = new socket(address,port);            //绑定套接字的输出流            os = socket.getoutputstream();            sca = new scanner(system.in);            while(true) {                message = sca.next();                //写入输出流,在局域网中传输                os.write(message.getbytes());            }        } catch (unknownhostexception e) {            e.printstacktrace();        }catch (ioexception e) {            e.printstacktrace();        }finally {            try {            //关闭端口号,关闭io流                os.close();                socket.close();            } catch (ioexception e) {                e.printstacktrace();            }        }    }}
以上就是如何用java创建多线程局域网聊天室的详细内容。
其它类似信息

推荐信息