易语言服务器客户端问题

易语言服务器客户端问题,第1张

我是用超级列表框写的,超级列表框是一般是用插入表项和置标题来写的,还有客户离开的时候会返回数据到服务端的,你在服务端可以用取回客户来知道IP,再通过IP查找出在你服务端显示的是哪位,然后就可以删除那位了

这个可以借鉴下远控的代码啊 需要代码的话我可以给你版本 2
支持库 internet
支持库 eAPI子程序 >利用服务器控件和客户控件可以做出一个局域网的登录、控制系统源码如下: 版本
2
支持库
sock程序集
窗口程序集1
程序集变量
用户,
文本
程序集变量
密码,
文本型子程序
__启动窗口_创建完毕
局部变量
IP,
文本型,
,
"0"IP

取本机IP
()
编辑框1内容

IP
[1]子程序
_服务器_数据到达
局部变量
数据,
文本型数据

删首尾空
(到文本
(服务器取回数据
()))
用户

取文本左边
(数据,
寻找文本
(数据,
“#”,
,
真)

1)
密码

取文本右边
(数据,
取文本长度
(数据)

寻找文本
(数据,
“#”,
,
真))
信息框
(“有用户登录:”

#换行符

用户

#换行符

密码,
0,
)
子程序
_按钮1_被单击客户连接
(编辑框1内容,
19730)
客户发送数据
(到字节集
(编辑框2内容

“#”

编辑框3内容))
子程序
_服务器_客户进入输出调试文本
(服务器取回客户
())

本地测试,客户端连接127001,如果测试通信正常写的代码没问题,就是下面其中一个问题:1IP地址错误或端口冲突(使用1024-30000的端口),2客户端或服务端其中在一方在类局域网环境(路由器间隔需要端口映射,在有路由器端映射)。3客户端有防火墙阻隔(开放客户和服务端使用连接的端口)。最好使用反向连接可以绕过系统自带和一般防火墙。

对,就是要用端口映射。

第一个参数的话要填你电脑的外网ip(查外网ip:在百度搜索输入 ip ,按回车就可也看到了)。

第二个参数是填你映射的那个端口,还有服务端的端口应该和你映射的端口一致才可以!

可以考虑用JAVA实现监听客户端口,参考例子如下:

package test; 
import javaioByteArrayOutputStream;
import javaioIOException;
import javaioInputStream;
import javaioOutputStream;
import javalangreflectMethod;
import javanetDatagramPacket;
import javanetDatagramSocket;
import javanetInetAddress;
import javanetServerSocket;
import javanetSocket;
import javanetSocketException;
import javautilHashMap;
import javautilLinkedList;
import javautilList;
import javautilRandom;
/
  该程序用的DatagramSocket,实现UDP的通讯
  @author D'Addario
 
 /
public class Test{
 
    private int headLen = 12;//消息起点和终点的记录 例如classAclassB就是发往classA的消息,发送者是classB
    private Random random;
    private String serverIp;
    private int serverPort;
    private  HashMap<String,Classes> map ;
    {
        serverIp = "127001";
        serverPort = 9999; 
        random = new Random(SystemcurrentTimeMillis());
        map = new HashMap<String,Classes>();
        Classes A = Testthisnew Classes();
        Aip = "127001";
        Aname = "我是A";
        Aport = 10000;
        mapput("classA", A);
 
        Classes B = Testthisnew Classes();
        Bip = "127001";
        Bname = "我是B";
        Bport = 10001;
        mapput("classB", B);
    }
    public static void main(String[] a) throws  Exception{
        Test test = new Test();
        new Thread(testnew Server())start();
        Client client1 = testnew Client();
        client1mine = "classA";
        client1remote = "classB";
        new Thread(client1)start();
 
        Client client2 = testnew Client();
        client2mine = "classB";
        client2remote = "classA";
        new Thread(client2)start();
 
    }
    /
      成员 用于记录 每个成员的个性信息
      @author D'Addario
     
     /
    private class Classes {
        private String name ; //成员姓名
        private String ip ; //成员ip
        private int port;//成员的client server 监听端口
    }
    /
      server 用于转发两个client之间消息的类
      @author D'Addario
     
     /
    private class Server implements Runnable{
 
        public void run() {
            // TODO Auto-generated method stub
            boolean start = false;
            DatagramSocket socket = null;
            try {
                socket = new DatagramSocket(serverPort);
                start = true;
            } catch (SocketException e1) {
 
                e1printStackTrace();
            }
            while(start)
            {
 
                try {
 
                    byte[] data = new byte[1024];
                    DatagramPacket packet = new DatagramPacket(data,datalength);
                    socketreceive(packet);
                    int len = packetgetLength();
                    //Systemoutprintln("recevie data:"+new String(data,0,len));                
                    if(len<headLen)
                        throw new IOException("无效数据");
                    String id = new String(data,0,headLen/2);//获取发往对象的ID
                    String id2 = new String(data,headLen/2,headLen/2);    
                    Systemoutprintln("receive from "+id2 +", send to "+id+",msg["+new String(data,headLen,len-headLen)+"]");
                    Classes one = mapget(idtrim());        
                    DatagramPacket retPack = new DatagramPacket(data,0,len,InetAddressgetByName(oneip),oneport);
                    socketsend(retPack);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    eprintStackTrace();
                }
            }
        }
    }
    /
      Client 客户端类,用于客户端消息的发送
      @author D'Addario
     
     /
    private class Client implements Runnable{
 
        private String mine;
        private String remote;
 
 
        public void run() {
            // TODO Auto-generated method stub
            String msg = remote+mine;
            DatagramSocket socket = null;
            try {
                socket = new DatagramSocket(mapget(mine)port);
                ClientServer srv=new ClientServer();
                srvsetSocket(socket);
                new Thread(srv)start();
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                eprintStackTrace();
            }
            byte[] data ;
            while(true)
            {
                String sendStr = msg + "给我"+randomnextInt(5000)+"分吧";
                data = sendStrgetBytes();
 
                try {
                    DatagramPacket retPack = new DatagramPacket(data,0,datalength,InetAddressgetByName(serverIp),serverPort);
                    socketsend(retPack);
                    Threadsleep(randomnextInt(5)1000);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    eprintStackTrace();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    eprintStackTrace();
                }
 
 
            }
        }    
    }
    /
      客户端server 用于监听服务器的消息
      @author D'Addario
     
     /
    private class ClientServer implements Runnable{
        DatagramSocket socket ;
 
        public DatagramSocket getSocket() {
            return socket;
        }
 
        public void setSocket(DatagramSocket socket) {
            thissocket = socket;
        }
 
        public void run() {
            byte[] data = new byte[1024];
            DatagramPacket packet = new DatagramPacket(data,datalength);
            while(true){
                try {
                    socketreceive(packet);
                    int len = packetgetLength();
                    if(len<headLen)
                        throw new IOException("无效数据");
                    Systemoutprintln("I get the message :"+ThreadcurrentThread()getId()+"-->["+new String(data,0,len)+"]");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    eprintStackTrace();
                }    }        
        }
 
    }
 
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12578954.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存