我在Windows 8.1下编写此代码。我想首先将套接字连接到本地主机。然后连接到我创建的虚拟机,该虚拟机已连接到本地网络。这是我的代码。
//Create my socket
SOCKET sock;
SOCKADDR_IN sin;
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(22);
sock = socket(AF_INET,SOCK_STREAM,0);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
if(connect(sock ,(SOCKADDR *)&sin, sizeof(sin)) <0)
{
printf("socket can't connect to the server 192.168.56.101 \n");
}
else
{
printf("socket succeeded to connect to the server 192.168.56.101 \n");
}
该代码看起来很奇怪,目前尚不清楚该怎么做。如果要建立连接,则需要两个套接字,它们通常处于不同的进程中。服务器进程通常会调用
socket() // create a socket
bind() // bind socket to local address and port
listen() // start listening
accept() // wait for connection from client and return connected socket
// communication over the socket
close()
而客户通常会打电话
socket()
connect() // connect to the server
// communication over the socket
close()
如果客户端bind()
希望指定传出端口,则可以选择调用该客户端,但这通常不是必需的,因为OS会自动分配一个临时端口。
上面的代码先调用bind()
,然后connect()
再到同一地址。如果bind()
成功,则没有任何人在监听该地址,并且connect()
显然失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句