小编dmo*_*221的帖子

为什么我在Java HashMap中获得重复的键?

我似乎在标准的Java HashMap中获得了重复的键.通过"复制",我的意思是键的equals()方法相同.这是有问题的代码:

import java.util.Map;
import java.util.HashMap;

public class User {
    private String userId;
    public User(String userId) { 
        this.userId = userId;
    }
    public boolean equals(User other) {
        return userId.equals(other.getUserId());
    }
    public int hashCode() {
        return userId.hashCode();
    }
    public String toString() {
        return userId;
    }

    public static void main(String[] args) {
        User arvo1 = new User("Arvo-Part");
        User arvo2 = new User("Arvo-Part");
        Map<User,Integer> map = new HashMap<User,Integer>();
        map.put(arvo1,1);
        map.put(arvo2,2);

        System.out.println("arvo1.equals(arvo2): " + arvo1.equals(arvo2));
        System.out.println("map: " + map.toString());
        System.out.println("arvo1 hash: " + …
Run Code Online (Sandbox Code Playgroud)

java equals hashmap hashcode

19
推荐指数
2
解决办法
2011
查看次数

C套接字可以在没有客户端关闭连接的情况下收集0个字节吗?

我在C中实现了一个Web服务器.它调用recv()一个连接的阻塞套接字来接收传入的HTTP请求.Linux手册页recv()在阻塞套接字上说明了以下内容:

如果套接字上没有可用的消息,则接收呼叫等待消息到达...接收呼叫通常返回任何可用的数据,直到请求的数量,而不是等待接收所请求的全部金额.

...

这些调用返回接收的字节数,如果发生错误则返回-1 ...当对等体执行有序关闭时,返回值将为0.

因此,要接收完整请求,我的服务器代码包含以下形式的循环:

int connfd; // accepted connection
int len;    // # of received bytes on each recv call

...

while (/* HTTP message received so far has not terminated */) {
  len = recv(connfd, ...);
  if (len == 0) {
    // close connfd, then escape loop
  } else if (len < 0) {
    // handle error
  } else {
    // process received bytes
  }
}    
Run Code Online (Sandbox Code Playgroud)

我的问题:recv()由于网络问题而没有客户端执行有序关闭,是否有可能返回0个字节,从而导致我的代码过早地退出循环?手册页含糊不清.

c sockets recv server

5
推荐指数
1
解决办法
4602
查看次数

标签 统计

c ×1

equals ×1

hashcode ×1

hashmap ×1

java ×1

recv ×1

server ×1

sockets ×1