socket编程的原理呢?
(1)客户端
①建立客户端的Socket,确定要连接的服务器的主机名和端口。
②发送连接请求到服务器,并等待服务器的回馈信息。
③连接成功后,与服务器进行数据的交互。
④数据处理完毕后,关闭自身的Socket连接
(2)服务器端
①建立服务器端的Socket,开始侦听整个网络中的连接请求。
②当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。
③当完成通信后,服务器关闭与客户端的Socket连接。
老师给了socket编程实验的client,server两个程序代码的实例,但是下载下来之后不懂怎么运行。
别用VC环境 = =VC的环境都十年前的东西了。
WINSOCK2是近4.5年才出来的。
要么你配置下个WinSock2.h,要么换个环境,要么就改下代码用winsock.h
SOCKET编程
#include <string.h>
#include <winsock.h>
#include <windows.h>
#include <iostream.h>
#ment (lib,"ws2_32.lib")
int main (int argc, char *argv[])
{
int iportFrom,iportTo;
int testsocket;
int iopenedport = 0;
struct sockaddr_in target_addr;
WSADATA wsaData;
WORD wVersionRequested=MAKEWORD(1,1);
if (argc <= 3)
{
cout << "使用格式 : " << argv[0] << " 主机IP地址 开始端口号 结束端口号
" << endl;
exit(1);
}
if (atoi (argv[2]) > atoi (argv[3]))
{
cout << "错误!开始端口号必须小于结束端口号" << endl;
exit(1);
}
else
{
if (WSAStartup (wVersionRequested , &wsaData) )
{
cout << "连接socket库失败,请检查版本号是否为1.1
" << endl;
exit(1);
}
iportFrom=atoi (argv[2]);
iportTo=atoi (argv[3]);
for (int i=iportFrom; i <= iportTo; i++)
{
cout << "正在建立socket................................" << endl;
if ((testsocket=socket (AF_INET,SOCK_STREAM,0) ) == INVALID_SOCKET)
{
cout << "Socket建立失败!" << endl;
exit(0);
}
target_addr.sin_family = AF_INET;
target_addr.sin_port = htons(i);
target_addr.sin_addr.s_addr = _addr (argv[1]);
cout << "正在扫描端口:" << i << endl;
if (connect (testsocket, (struct sockaddr *) &target_addr, sizeof(struct sockaddr)) == SOCKET_ERROR)
cout << "端口" << i << "关闭!" << endl;
else
{
iopenedport++;
cout << "端口" << i << "开放
" << endl;
}
}
cout << "目标主机" << argv[1] << "从" << iportFrom << "--" << iportTo << "共有" << iopenedport << "个端口开放" << endl;
closesocket (testsocket);
WSACleanup();
}
return 0;
}
vc6.0 下 编译