标签: network-programming

从IP地址获取主机名

我的问题是将IP地址与其主机名匹配.

如果IP地址是公共IP,那么一个简单的socket.gethostbyaddr(ip)解决它,但我的问题是私有IP即网络的IP.

如何从网络IP地址获取主机名?有没有找到主机名的方法?

我试图在Linux上这样做.

python linux network-programming

1
推荐指数
1
解决办法
3万
查看次数

从套接字C++部分接收数据包

我有一个麻烦,我的服务器应用程序发送8字节长度的数据包 - AABBCC1122334455但我的应用程序分两部分收到此数据包,AABBCC1122并334455通过"recv"函数,我该如何解决?

谢谢!

c++ sockets network-programming packet

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

.getInetAddress()的返回不是实际的IP

我从一个函数中获取以下代码,该函数将主机名作为输入,并且应该为该主机提取证书.我需要显示远程主机的IP地址.我使用".getInetAdress()"来返回远程主机的IP:http://docs.oracle.com/javase/1.5.0/docs/api/java/net/Socket.html#getInetAddress ().

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();

System.out.println("Starting SSL Socket For "+hostname+" port "+port);
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port);

//To get the IP for the remote host. Format: (domain name/IP), 
//then manually covert it to string

String remoteIP=socket.getInetAddress().toString();
System.out.println("Remote address = " + remoteIP);

socket.startHandshake();     
Certificate[] serverCerts = socket.getSession().getPeerCertificates();
Run Code Online (Sandbox Code Playgroud)

例如,当我运行程序时,主机是:"www.tesco.com",".getInetAddress()".将此IP返回给我:88.221.94.232.当我尝试在浏览器中输入此IP时,即使在向URL添加"https://"之后,它也会向我显示"无效的网址".然而,如果我试图ping"tesco.com",我会得到另一个IP:"212.140.185.177",如果我在浏览器中输入它,它会打开tesco的网页.

我有什么误会?除了getInetAddress和getHostAddress()之外还有其他方法来获取远程主机的IP地址(不使用套接字)吗?

java sockets network-programming network-security

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

SO_LINGER选项不会导致close()等待

我写了下面的代码,以便创建一个echo服务器(我写入stdout的数据从我的PC移动到服务器并返回到我的PC).在代码中,我在套接字中设置了SO_LINGER选项.因此,当我按下Ctrl+ C导致client.cpp向服务器cpp发送FIN时,client.cpp的close()应等待10秒,以便server.cpp的套接字发送回FIN.

但我发现client.cpp立即完成执行并在Ctrl+ C被按下后退出,即使close()函数没有返回-1,如果另一方在l_linger中提到的时间之前没有发送FIN,它应该有到期(我确定服务器没有发送FIN或它必须已经在tcpdump中列出.)服务器端没有发送FIN,除非我在其终端上按Ctrl+ C.tcpdump直到我按下服务器终端上的Ctrl+ C,如屏幕截图所示:

上面突出显示的行是客户的FIN.

client.cpp:

int main()
{
    int clifd;
    clifd=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
    sockaddr_in serv;
    bzero(&serv, sizeof(serv));
    serv.sin_family=AF_INET;
    serv.sin_port=htons(3345);
    inet_aton("127.0.0.1", &(serv.sin_addr));

    linger lin;
    unsigned int y=sizeof(lin);
    lin.l_onoff=1;
    lin.l_linger=10;
    setsockopt(clifd,SOL_SOCKET, SO_LINGER,(void*)(&lin), y);  

    connect(clifd, (sockaddr*)(&serv), sizeof(serv));
    int n,m;
    char data[100];
    char recvd[100];
    for(;;)
    {
        fgets(data, 100,stdin );
        n=strlen(data);
        cout<<"You have written "<<n<<endl; …
Run Code Online (Sandbox Code Playgroud)

c++ sockets network-programming

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

为什么我不能在维基百科网站上使用urllib2.urlopen?

可能重复:
使用Python获取Wikipedia文章

>>> print urllib2.urlopen('http://zh.wikipedia.org/wiki/%E6%AF%9B%E6%B3%BD%E4%B8%9C').read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
    response = meth(req, response)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
    'http', request, response, code, msg, hdrs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
    return self._call_chain(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error …
Run Code Online (Sandbox Code Playgroud)

python networking wikipedia network-programming

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

用C++刷新套接字

我send在c ++中调用函数后尝试刷新套接字.
我用过winsock2.h图书馆.

我需要在发送消息后立即发送数据,但我找不到像flash函数这样的函数.

我正在尝试将消息发送到设备,它希望逐个接收消息.
我的意思是,如果我在发件人中发送两条消息,如"MessageOne"和"MessageTwo",则接收方收到的"MessageOneMessageTwo"不是单独的,并且设备无法识别这些命令.

那我该怎么办呢?

c++ sockets network-programming winsock2

1
推荐指数
1
解决办法
2万
查看次数

sendto在Mac OS X 10.8上返回EINVAL

我有一个适用于Mac OS 10.6的程序,但在10.8中莫名其妙地失败了.它的要点是sendto现在返回-1并将errno设置为EINVAL(22).出了什么问题?

c sockets macos network-programming sendto

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

为什么recv()与MSG_PEEK阻塞?

只有一次,当创建新连接时,我想查看流以确定连接是否是SSL连接.为此,我使用带有MSG_PEEK标志的recv().问题是,对于不是SSL连接且没有任何初始传入数据的连接,recv会阻塞几秒钟.我该如何解决这个问题?

c network-programming

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

> 1客户端无法连接到c#中的服务器

我正在C#中创建一个聊天客户端,以便在localhost上进行演示.

这是相关的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;

namespace WindowsFormsApplication1
{
 public partial class Form1 : Form
 {
    static List<TcpListener> garabage_collection_preventor = new List<TcpListener>();
    static Dictionary<IPEndPoint, bool> address_dictionary = new Dictionary<IPEndPoint, bool>();
    static int port_increment = 9999;
    static int client_id = 0;

    void start_listening()
    {
        while (true)
        {
            TcpListener listen = new TcpListener(IPAddress.Any, port_increment);
            garabage_collection_preventor.Add(listen);
            listen.Start();
            TcpClient client = listen.AcceptTcpClient();
            IPEndPoint temp_end …
Run Code Online (Sandbox Code Playgroud)

.net c# sockets networking network-programming

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

通过网络在C中发送/接收数据

我写了这个程序:

#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int socket_desc;
struct sockaddr_in adress;
int addrlen;
int new_socket;
int bufsize = 1024;

char *you_sent = "You sent: ";

int main() {
    char *buffer = malloc(bufsize);
    socket_desc = socket(AF_INET, SOCK_STREAM, 0);
    adress.sin_family = AF_INET;
    adress.sin_addr.s_addr = INADDR_ANY;
    adress.sin_port = htons(7000);
    bind(socket_desc, (struct sockaddr *)&adress, sizeof(adress));
    listen(socket_desc, 3);
    addrlen = sizeof(struct sockaddr_in);
    new_socket = accept(socket_desc, (struct sockaddr *)&adress, &addrlen);
    while(recv(new_socket,buffer,bufsize,0))
    {
        printf("I recieved: %s", buffer);
        send(new_socket, you_sent, strlen(you_sent), …
Run Code Online (Sandbox Code Playgroud)

c network-programming

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