我的问题是将IP地址与其主机名匹配.
如果IP地址是公共IP,那么一个简单的socket.gethostbyaddr(ip)解决它,但我的问题是私有IP即网络的IP.
如何从网络IP地址获取主机名?有没有找到主机名的方法?
我试图在Linux上这样做.
我有一个麻烦,我的服务器应用程序发送8字节长度的数据包 - AABBCC1122334455但我的应用程序分两部分收到此数据包,AABBCC1122并334455通过"recv"函数,我该如何解决?
谢谢!
我从一个函数中获取以下代码,该函数将主机名作为输入,并且应该为该主机提取证书.我需要显示远程主机的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地址(不使用套接字)吗?
我写了下面的代码,以便创建一个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) 可能重复:
使用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) 我send在c ++中调用函数后尝试刷新套接字.
我用过winsock2.h图书馆.
我需要在发送消息后立即发送数据,但我找不到像flash函数这样的函数.
我正在尝试将消息发送到设备,它希望逐个接收消息.
我的意思是,如果我在发件人中发送两条消息,如"MessageOne"和"MessageTwo",则接收方收到的"MessageOneMessageTwo"不是单独的,并且设备无法识别这些命令.
那我该怎么办呢?
我有一个适用于Mac OS 10.6的程序,但在10.8中莫名其妙地失败了.它的要点是sendto现在返回-1并将errno设置为EINVAL(22).出了什么问题?
只有一次,当创建新连接时,我想查看流以确定连接是否是SSL连接.为此,我使用带有MSG_PEEK标志的recv().问题是,对于不是SSL连接且没有任何初始传入数据的连接,recv会阻塞几秒钟.我该如何解决这个问题?
我正在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) 我写了这个程序:
#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)