服务端 为何获取不到客户端的ip 只能获取到服务端所在的ip 求获取客户端ip

服务端代码

ServerSocket server = new ServerSocket(12345);
boolean b = true;
Socket client = null;
while (b) {
client = server.accept();
System.out.println("客户端" +client.getInetAddress().getHostAddress()+ "连接成功");
Tools.list.add(client);
new ServerThreand(client).start();
}

    客户端代码

    Socket client = (Socket)session.getAttribute("client");
        if (null == client) {
            client = new Socket("192.168.1.28", 0422);
            session.setAttribute("client", client);
        }
        PrintStream out = new PrintStream(client.getOutputStream());
        out.println(client.getInetAddress()+"发送:"+message);

1个回答

获取客户端ip不是这个方法,是getRemoteAddress

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
netty服务端怎么打印与其连接的客户端的id?

netty服务端怎么打印与其连接的客户端的id?netty服务端怎么打印与其连接的客户端的id?netty服务端怎么打印与其连接的客户端的id?

EJB接口服务端怎么获取客户端的IP地址?

最近公司有个老系统要下线,上面还有调用量,但是不清楚具体是哪个系统调用的,账号管理比较乱,存在同一个账号有多个系统在用的情况,所以只能通过客户端IP来精确定位 调用方。网上查了半天也没找到获取IP的方法。 中间件:weblogic 地址:t3://localhost:7001 多谢! ps: 通过SeasionContext只能获取到账号,没找到过去IP的方法。

客户端和服务端通过建立socket通信,协议是tcp/ip

有一个问题咨询:一个客户端和一个服务端通过tcp/ip连接(之间建立socket通信),在不断网的情况下,服务端关闭,客户端报警,重新开启服务器,客户端能够重新连接上服务端,但是如果拔掉网线,客户端就连接不上服务端了,但从服务端发送过来的数据还是可以读到,可是从客户端发送的数据不能到达服务端,这是为什么???

java socket网络聊天室 客户端接收不到服务端的消息

![图片说明](https://img-ask.csdn.net/upload/202004/17/1587121278_71861.png) 运行之后 服务端给客户端发消息 客户端接收不到服务端的消息 服务端可以接收到客户端的消息 求助!! 服务端代码: ``` package Chat; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.ServerSocket; import java.net.Socket; //如果一个类需要有界面的显示,那么该类就需要继承自JFrame,并被称为"窗体类"。 //1.定义JFrame窗体中的组件 //2.在构造方法中初始化窗体的组件 //3.使用网络编程完成数据的传输(TCP,UDP 协议) //4.实现发送按钮的监听点击事件 public class ServerChatMain extends JFrame implements ActionListener{ public static void main(String[] args) { //调用构造方法 new ServerChatMain(); } //属性 //文本域 private JTextArea jta; //滚动条 private JScrollPane jsp; //面板 private JPanel jp; //文本框 private JTextField jtf; //按钮 private JButton jb; //输出流 private BufferedWriter bw = null; //构造方法 public ServerChatMain(){ //初始化组件 jta = new JTextArea(); //注意:需要设置文本域默认不可编辑 jta.setEditable(false); //注意:需要将文本域添加到滚动条中,实现滚动效果。 jsp = new JScrollPane(jta); //面板 jp = new JPanel(); jtf = new JTextField(10); jb = new JButton("发送"); //注意:需要将文本框与按钮添加到面板中 jp.add(jtf); jp.add(jb); //注意:需要将文本框与面板全部添加到窗体中 this.add(jsp, BorderLayout.CENTER); this.add(jp,BorderLayout.SOUTH); //注意:需要设置标题,大小,位置,关闭,是否可见 this.setTitle("聊天室服务端"); this.setSize(300,300); this.setLocation(300,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); //TCP服务端开始 //给发送按钮绑定一个监听点击事件 jb.addActionListener(this); try{ //1.创建服务端套接字 ServerSocket serverSocket= new ServerSocket(8888); //2.等待服务端的连接 Socket socket = serverSocket.accept(); //3.获取Socket通道输入流(使用BufferedReader实现每行读取) //InputStream in= socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //4. 获取Socket通道输出流(使用BufferedWriter实现刷新和换行) //当用户需要点击发送按钮的时候需要写出数据 bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //循环读取数据,并拼接到文本域中 String line = null; while((line=br.readLine())!=null){ //将读取的数据拼接到文本域中显示 jta.append(line+System.lineSeparator()); } //5.关闭ServerSocket通道 serverSocket.close(); }catch (IOException e){ e.printStackTrace(); } //TCP服务端结束 } @Override public void actionPerformed(ActionEvent e){ //System.out.println("发送按钮被点击了"); //1.获取文本框中发送的内容 String text =jtf.getText(); //2.拼接需要发送的内容 text ="服务端对客户端说:"+text; jta.append(text+System.lineSeparator() ); //3.发送 try { bw.write(text); bw.newLine(); bw.flush(); //4.清空文本框内容 jtf.setText(""); } catch (IOException e1) { e1.printStackTrace(); } } } ``` 客户端代码: ``` package Chat; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.Socket; //如果一个类需要有界面的显示,那么该类就需要继承自JFrame,并被称为"窗体类"。 //1.定义JFrame窗体中的组件 //2.在构造方法中初始化窗体的组件 public class ClientChatMain extends JFrame implements ActionListener { public static void main(String[] args) { //调用构造方法 new ClientChatMain(); } //属性 //文本域 private JTextArea jta; //滚动条 private JScrollPane jsp; //面板 private JPanel jp; //文本框 private JTextField jtf; //按钮 private JButton jb; //输出流 private BufferedWriter bw = null; //构造方法 public ClientChatMain() { //初始化组件 jta = new JTextArea(); //注意:需要设置文本域默认不可编辑 jta.setEditable(false); //注意:需要将文本域添加到滚动条中,实现滚动效果。 jsp = new JScrollPane(jta); //面板 jp = new JPanel(); jtf = new JTextField(10); jb = new JButton("发送"); //注意:需要将文本框与按钮添加到面板中 jp.add(jtf); jp.add(jb); //注意:需要将文本框与面板全部添加到窗体中 this.add(jsp, BorderLayout.CENTER); this.add(jp, BorderLayout.SOUTH); //注意:需要设置标题,大小,位置,关闭,是否可见 this.setTitle("聊天室客户端"); this.setSize(300, 300); this.setLocation(300, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); //TCP客户端开始 //给发送按钮绑定一个监听点击事件 jb.addActionListener(this); try { //1.创建客户端套接字(尝试连接) Socket socket = new Socket( "192.168.1.106",8888); //2.获取socket通道输入流 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //3.获取socket通道输出流 bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //循环读取数据,并拼接到文本域中 String line = null; while ((line = br.readLine()) != null) ; jta.append(line + System.lineSeparator()); //4.关闭socket通道 socket.close(); } catch (Exception e) { e.printStackTrace(); } //TCP客户端结束 } @Override public void actionPerformed(ActionEvent e){ //1.需要获取文本框中需要发送的数据内容 String text =jtf.getText(); //2.拼接内容 text = "客户端对服务端说:"+text; //3.自己显示 jta.append(text+System.lineSeparator()); try { //4.发送 bw.write(text); bw.newLine(); bw.flush(); //5.清空 jtf.setText(""); } catch (IOException ex) { ex.printStackTrace(); } } } ```

mina udp 客户端收不到服务端消息

已经关闭防火墙,抓包工具可以监听到服务端已经发送了消息 客户端代码 package cn.encdata.service.signal.realtime.client; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.NioDatagramConnector; import org.apache.mina.transport.socket.nio.NioSocketConnector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cn.encdata.service.Config; //通信客户端 public class SocketClient { private ConnectFuture future = null;//连接对象 private boolean exit = false; private static Charset CS = Charset.forName("GBK"); private IoSession session = null;//会话 private static Logger log = LoggerFactory.getLogger(SocketClient.class); private static SocketClient client= null; private SocketClient() { } public static SocketClient instance() { if(client == null) { client = new SocketClient(); } return client; } public synchronized void start() { new Thread(new Runnable(){ public void run(){connect();} }).start(); } public synchronized void stop() { if(future!=null && future.isConnected()) { future.getSession().close(true); future = null; exit = true; } } public synchronized void send(IoBuffer buffer) { if(buffer == null) return; if(session == null || !session.isConnected()) { log.info("通讯链路尚未创建,无法发送数据."); return; } if(session.getAttribute("login") == null) { log.info("通讯链路尚未通过验证,无法发送数据."); return; } session.write(buffer); buffer.free(); } private void connect() { while(!exit) { if(future == null || !future.isConnected()) { IoConnector connector = null; try { connector = new NioDatagramConnector(); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory())); //connector.setConnectTimeoutMillis(Config.Server.ConnectTimeout); connector.setHandler(new SocketDataHandler()); future = connector.connect(new InetSocketAddress("172.16.13.99",5555),new InetSocketAddress("172.163.133.200",8341)); future.awaitUninterruptibly(); if (!future.isConnected()) { log.info(" 断线连接中{}:{}",Config.Server.IP,Config.Server.Port); Thread.sleep(Config.Server.ReconnectInterval); continue; } session = future.getSession(); future.getSession().getCloseFuture().awaitUninterruptibly(); future = null; } catch (Exception e) { log.error("创建通讯连接异常",e); break; } finally { if(connector != null) { connector.dispose(); } } } try { Thread.sleep(Config.Server.ReconnectInterval); } catch (InterruptedException e) { e.printStackTrace(); } } } } handler类代码为: package cn.encdata.service.signal.realtime.client; import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cn.encdata.service.Config; import cn.encdata.service.signal.realtime.receive.handler.FaceHandler; public class SocketDataHandler extends IoHandlerAdapter { private final Logger log = LoggerFactory.getLogger(SocketDataHandler.class); @Override public void sessionOpened(IoSession session) { log.info("与服务器连接成功:"+session.getRemoteAddress()); log.info("发送登录消息"); //退出登录 //session.write("退出登录\rsuper\r"); session.write("登录系统\rsuper\r111\r"); } @Override public void sessionClosed(IoSession session) throws Exception { log.info("{}与服务器断线",session.getRemoteAddress()); } @Override public void messageReceived(IoSession session, Object message) { System.out.println("客户端传来消息:"+message.toString()); } @Override public void sessionIdle(IoSession session, IdleStatus status) { if (status == IdleStatus.BOTH_IDLE) { //发送心跳包 IoBuffer heartbeat = IoBuffer.allocate(2+1); heartbeat.order(ByteOrder.BIG_ENDIAN); //heartbeat.putUnsignedShort(1); //heartbeat.putUnsigned(0); //heartbeat.flip(); log.info("发送心跳消息"); session.write("客户端正常\rsuper\r"); } } @Override public void sessionCreated(IoSession session) throws Exception { //当创建一个新的连接时被触发,即开始一个新的session是被触发 log.info("sessionCreated"); session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 20); } @Override public void messageSent(IoSession session, Object message) { } @Override public void exceptionCaught(IoSession session, Throwable cause) { log.error(cause.getMessage(),cause); } }

socket客户端有几种发送消息到服务端的方式,服务端应该怎么取出这个值

场景,我有一个服务端,客户端是超级网口USR-K3的TCPClient。K3发送消息给我服务端时,已经跟我建立连接,服务端已经看到了它的IP和端口,但是在取出K3发过来的值时,显示为“null”。求大神告知是不是我取值的方法和K3放值得方法不一样才取不出值。

为什么springcloud配置中心服务端获取到最新配置,但客户端端没有拉取最新信息?

最近在练习springcloud项目,在练习config配置中心时,已经实现了在GitHub上更新配置,配置中心服务端拿到了配置,但客户端并没有去拉取配置。 **环境**: jdk:1.8 springboot:2.0.6.RELEASE SpringCloud:Finchley.SR2 **服务端pom如下** ``` <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-monitor</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> <version>2.0.0.RELEASE</version> </dependency> </dependencies> ``` **配置如下** ``` server: port: 8888 eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true spring: application: name: config cloud: config: server: git: uri: https://github.com/*****/seekbean.git username: ********* password: ********* basedir: /E:/MyDownloads/springboot rabbitmq: host: localhost port: 5672 username: guest password: guest management: endpoints: web: exposure: include: "*" ``` **客户端pom如下** ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> <version>2.0.0.RELEASE</version> </dependency> ``` **客户端配置如下** ``` spring: application: name: orderapi cloud: config: discovery: enabled: true service-id: CONFIG profile: dev rabbitmq: host: localhost port: 5672 username: guest password: guest eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true management: endpoints: web: exposure: include: "*" endpoint: bus-refresh: enabled: true ``` 当我在GitHub上编辑更新我的配置时,会向我的config的服务端发送请求,webhooks配置为 ![图片说明](https://img-ask.csdn.net/upload/201901/19/1547868925_806235.png) 每次更新之后配置,我的config服务都能拿到最新配置 ![图片说明](https://img-ask.csdn.net/upload/201901/19/1547869058_745017.png) 但客户端却没有主动去拉取配置,无法得到实时的配置信息 ![图片说明](https://img-ask.csdn.net/upload/201901/19/1547869153_62940.png) **客户端代码如下** ``` @Data @Component @ConfigurationProperties("girl") @RefreshScope public class TestConfig { private String name; private String age; } ``` ``` @RestController @RequestMapping("/girl") public class EnvController { @Autowired private TestConfig testConfig; @GetMapping("print") public String print(){ return "name:"+testConfig.getName()+",age:"+testConfig.getAge(); } } ``` 当我在push我的配置时,config服务端拿到了配置,其控制台也输出了相应信息,但客户端的控制台却毫无反应,求大神帮忙看看,不胜感激

linux c socket tcp客户端只能发送一次,发送第二次服务端接收不到,必须重启才行

服务端循环accept,如果每次客户端只发送一次请求,就没问题, 但是如果客户端循环发送数据,服务端就接收不到一次连接中的第二次请求。 下面贴代码,求解这个问题到底咋回事 服务端 sock_serv.c #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <string.h> #include <netinet/in.h> #include <unistd.h> #include <errno.h> #include <arpa/inet.h> #define BACKLOG 10 #define RECVBUF_SIZE 4096 #define PORT 20000 int init_server(int type){ int sockfd; if ((sockfd = socket(AF_INET, type, 0)) == -1){ printf("create socker error\n"); return -1; } struct sockaddr_in addrv4; bzero(&addrv4, sizeof(addrv4)); addrv4.sin_family = AF_INET; addrv4.sin_port = htons(PORT); addrv4.sin_addr.s_addr = INADDR_ANY; if (bind(sockfd, (struct sockaddr *)&addrv4, sizeof(addrv4)) < 0){ printf ("bind sockfd error\n"); return -1; } if (listen(sockfd, BACKLOG) < 0){ printf ("listen sockfd error\n"); return -1; } return sockfd; } int main(void){ int sockfd, newfd; if ((sockfd = init_server(SOCK_STREAM)) == -1){ printf ("server init failed\n"); exit(1); } while (1) { struct sockaddr client_addr; bzero(&client_addr, sizeof(client_addr)); socklen_t len = sizeof(client_addr); char recvbuf[RECVBUF_SIZE]; if ((newfd = accept(sockfd, &client_addr, &len)) < 0){ printf("%s\n", strerror(errno)); printf ("accept request error\n"); exit(1); } printf(" the client fd is :%d\n", newfd); printf ("client ip is %s", inet_ntoa(((struct sockaddr_in *)&client_addr)->sin_addr)); ssize_t ret; if ((ret = recv(newfd, recvbuf, RECVBUF_SIZE, 0)) < 0){ printf("%s\n", strerror(errno)); printf("recv data error \n"); exit(1); } if (ret == 0) { printf("always read to EOF\n"); } printf("the client request data is :\n\t\t%s", recvbuf); char *resp_data = "the server was recvived success!"; if (send(newfd, resp_data, strlen(resp_data), 0) == -1){ printf("response data error\n"); exit(1); } //shutdown(newfd, SHUT_RDWR); //close(newfd); if (strcmp(recvbuf, "exit") == 0){ shutdown(sockfd, SHUT_RDWR); close(sockfd); } } } ``` ``` 客户端 sock_client.c #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <errno.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> #define BUFSIZE 4096 #define PORT 20000 void error(const char *str){ printf("%s\n" "the error info is : %s\n", str, strerror(errno)); } int init_client(){ int sockfd; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){ error("socket error"); return -1; } struct sockaddr_in addrv4; bzero(&addrv4, sizeof(addrv4)); addrv4.sin_family = AF_INET; addrv4.sin_port = htons(PORT); addrv4.sin_addr.s_addr = inet_addr("127.0.0.1"); if (connect(sockfd, (struct sockaddr *)&addrv4, (socklen_t) sizeof(addrv4)) == -1){ error("connect error"); return -1; } return sockfd; } int main(void){ char consolebuf[BUFSIZE]; char recvbuf[BUFSIZE]; int sockfd, len, recvlen; if ((sockfd = init_client()) == -1){ error("init client error"); exit(1); } while (1){ printf("input >>"); if ((len = read(STDIN_FILENO, &consolebuf, BUFSIZE)) == -1){ error("read data error"); exit(1); } if (strcmp(consolebuf, "exit-client") == 0){ break; } if (send(sockfd, consolebuf, len, 0) == -1){ error("send data error"); exit(1); } if ((recvlen = recv(sockfd, recvbuf, BUFSIZE, 0)) == -1){ error("receive the server response error\n"); exit(1); } write(STDOUT_FILENO, recvbuf, recvlen); } shutdown(sockfd, SHUT_RDWR); close(sockfd); exit(0); } ``` ```

用socket编写的客户端和服务端,客户端可以通过服务端的域名发送消息吗

本来要做GPRS通信模块发送命令到服务器端,服务器端根据命令做出反应,如果命令有需要还要返回数据到Gprs模块。网上搜怎么做,都是说用sokect做,我需要的是GPRS模块通过服务器的域名发送消息到服务端。

python中tornado如何获取到客户端请求过来的域名

代码如下所示: ![图片说明](https://img-ask.csdn.net/upload/201806/06/1528297547_389241.png) python中使用跨域想去,我想设置指定域名访问,但是我访问的域名有两个,所以我现在需要获取到客户端请求过来的域名是什么,然后用if判断 是我的域名才放行跨域,但是不怎么tornado怎么获取请求的域名

c#socket类,或者其他的类中有没有获取服务器ip和端口的方法

我写了一个服务端,代码如下 Socket newSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Console.WriteLine("获取主机信息中。。。。"); HostName = Dns.GetHostName(); //得到主机名 IpEntry = Dns.GetHostEntry(HostName);//获取主机IP string strIpAddr = IpEntry.AddressList[1].ToString(); //将ip抓换成string类型 IPAddress ip = IPAddress.Parse(strIpAddr); //将string类型的ip转换成IPAddress类型 try { newSock.Bind(ipep); } catch(Exception e) { Console.WriteLine(e.ToString()); } newSock.Listen(10); 现在我想写一个客户端的一个Windows程序,让它能和服务器相连接,代码如下: IPAddress ip = IPAddress.Parse("127.0.0.1"); Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口                   Console.WriteLine("连接服务器成功"); } catch { Console.WriteLine("连接服务器失败,请按回车键退出!"); return; } 服务端的控制台应用程序与客户端的windows应用程序不再同一台电脑上, 从这个客户端的代码可以看出来,那个IPADDress.Parse("127.0.0.1")中的ip是手动输入的,我想让它能够自动获取到另一台电脑中服务端的ip,应该怎么做?谢谢各位大神

socket服务端主动下发消息后没收到客户端回复之前不能主动下发下一条指令,该怎么做

服务端分为被动接收和主动下发,主动下发在一个方法(该方法根据传来的ip找到socket连接,发送传来的消息,返回客户端回复的消息),在action中调用这个方法(传入参数ip和消息),要实现在这个方法中没有收到客户端回复的消息之前,不能在action调用此方法。

UDP跨路由器通信,客户端无法收到服务端发送的UDP包

本人新手,正做一个UDP跨路由通信项目,遇如下问题:服务端(192.168.0.85)与路由器在同一网段,客户端(192.168.1.103)在该路由器组成的局域网内,现服务端可以接收到客户端发送的UDP包,但客户端无法收到服务端的UDP包。请问客户端发送的UDP包需怎样设置(IP/端口)? (PS:服务端与客服端在同一局域网内是可以UDP通信的) 以下是我的UDP设置 客户端--目标IP:192.168.0.85----目标端口10000----绑定发送端口9999----监听端口8888 服务端--目标IP:192.168.1.103----目标端口8888----绑定发送端口9999----监听端口10000 服务端可以正常接收客服端发过来的包,解析为:192.168.0.129:9999 个人认为192.168.0.129可视为路由器对外IP,但路由器发送UDP包的端口是9999吗????网上有帖子说将路由器的这个IP和端口作为服务器发送的UDP包里的目标IP/目标端口,将UDP包发给路由,然后路由器会自动转发给客户端。请问是正确的吗??? 求大神指教,谢谢!

c++ ACE Proactor 收到客户端传来消息的时候如何获取客户端的IP并显示

本人小白,刚刚开始研究ACE,看到网上很多Proactor的基本服务端,但这些服务器代码都是Echo服务端,服务端收到客户端发来的消息的时候,不会显示客户端对应的IP地址和端口,请问怎么获取对应的IP地址和端口?

TCP传输消息客户端和服务端

需要客户端和服务端,我用安卓APP发送消息到服务器端,然后客户端接受消息就控制单片机上面的灯泡..一直找不到

JavaWeb服务器端如何获取客户端的MAC地址和IMEI

在网上找了许多资料,发现获取MAC地址如果通过JS获取的话只能在IE上使用activeX获取,二通过IP获取的话基本都获取不到,就想知道B/S架构如果在服务器端获取到客户端的MAC地址

关于多个不同的Ip客户端调用同一个webservice方法,服务端进行用户会话数据区分

目前在写一个webservice供外部进行调用,由于要进行身份的验证,所以我在webservice的服务端加如了拦截器(客户将自己的信息写在soapHead消息中),然后在拦截器中取出soapHead中的消息,进行数据库用户信息的验证,验证通过之后才运行进行相关接口的调用。问题是在拦截器验证通过后,我要在调用的webservice接口方法中,​用到用户的身份信息去取其他相关数据。该怎么做呢? 开始我想到的是申明一个静态的变量,然后再拦截器中把数据存到静态变量中,然后webservice的接口方法中就可以直接使用了。过后想了想好想不对,如果有很多的不同IP的客户端都来调用webservice接口,那数据岂不是乱套了? 而且怎么判断哪个数据是哪个客户端的呢?

java socket服务器接收不到客户端发来的消息

package socket; public class MySeverSocket { public static void main(String[] args) { new ServerListener().start(); } } **************************************** package socket; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; public class ServerListener extends Thread { public void run (){ try { ServerSocket serverSocket = new ServerSocket(55555); while (true){ Socket socket = serverSocket.accept(); JOptionPane.showMessageDialog(null, "有客户端连接到了55555端口"); ChatSocket cs = new ChatSocket(socket); cs.start(); ChatManager.getChatManager().add(cs); } } catch (IOException e) { e.printStackTrace(); } } } *************************************** package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.Socket; public class ChatSocket extends Thread { Socket socket; public ChatSocket(Socket s) { this.socket = s; } public void out(String out) { try { socket.getOutputStream().write(out.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); String line = null; while ((line = br.readLine()) != null) { ChatManager.getChatManager().publich(this, line); } br.close(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ******************************************************** package socket; import java.util.Vector; public class ChatManager { private ChatManager() {} private static final ChatManager cm = new ChatManager(); public static ChatManager getChatManager() { return cm; } Vector<ChatSocket> vector = new Vector<ChatSocket>(); public void add(ChatSocket cs) { vector.add(cs); } public void publich(ChatSocket cs,String out) { for(int i = 0;i<vector.size();i++){ ChatSocket csChatSocket = vector.get(i); if (!cs.equals(csChatSocket)) { csChatSocket.out(out); } } } } 安卓客户端连接与发送消息方法 public void connect(){ final AsyncTask<Void,String,Void> read = new AsyncTask<Void, String, Void>() { String iptext = ip.getText().toString(); @Override protected Void doInBackground(Void... params) { try { socket = new Socket(iptext,55555); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); publishProgress("@success"); } catch (IOException e) { Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_SHORT).show(); e.printStackTrace(); } try { String line; while ((line = reader.readLine()) != null){ publishProgress(line); } } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(String... values) { if (values[0].equals("@success")){ Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_SHORT).show(); } text.append("别人说"+values[0]+"\n"); super.onProgressUpdate(values); } }; read.execute(); } public void send(){ try { // text.append("我说:"+editText.getText().toString()+"\n"); writer.write(editText.getText().toString()+"\n"); writer.flush(); editText.setText(""); } catch (IOException e) { e.printStackTrace(); } }

调用IPPROTO_RAW发送后,如果源IP不是本地IP,服务端收不到对应的包,不知为什么?

调用IPPROTO_RAW发送后,如果源IP不是本地IP,服务端收不到对应的包,不知为什么? 如果源IP与本地IP相同,对端网络可以收到。 如果源IP与本地IP不同,对端网络收不到包。 使用函数:golang syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_RAW) 抓包:(centos 7 环境上两台服务器) 客户端:发出 服务端:没有收到

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

获取Linux下Ftp目录树并逐步绑定到treeview

在linux下抓取目录树,双击后获取该节点子节点(逐步生成)。另外有两个类,一个是windows下的(一次性获取目录树),一个是linux下的(足部获取目录树)

NS网络模拟和协议仿真源代码

NS网络模拟和协议仿真源代码,包含代码说明及协议分析

简单的NS3网络模拟仿真(计算机网络作业)

简单的NS3网络模拟仿真,内附有PPT演示。论文评述。以及简单的安装教程。

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

cuda开发cutilDLL

包括cutil32.dll、cutil32D.dll、cutil32.lib、cutil32D.lib,以及附带的glew32.lib/freeglut.lib

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

Tensorflow与python3.7适配版本

tensorflow与python3.7匹配的最新库,更新了python3.7以后可以自行下载,或者去国外python的扩展包下载界面自行下载。

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

实现简单的文件系统

实验内容: 通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

四分之一悬架模型simulink.7z

首先建立了四分之一车辆悬架系统的数学模型,应用MATLAB/Simulink软件建立该系统的仿真模型,并输入路面激励为随机激励,控制不同的悬架刚度和阻尼,选用最优的参数得到车辆悬架的振动加速度变化曲线

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

pokemmo的资源

pokemmo必须的4个rom 分别为绿宝石 火红 心金 黑白 还有汉化补丁 资源不错哦 记得下载

test_head.py

本文件主要是针对使用dlib的imglab标注工具标记的目标检测框和关键点检测而生成的xml文件, 转换为coco数据集格式.

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

20行代码教你用python给证件照换底色

20行代码教你用python给证件照换底色

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

相关热词 c#分级显示数据 c# 不区分大小写替换 c#中调用就java c#正则表达式 验证小数 c# vscode 配置 c#三维数组能存多少数据 c# 新建excel c#多个文本框 c#怎么创建tcp通讯 c# mvc 电子病例
立即提问