在windows操作系统中进行socket编程,服务器和客户端要各司其职,简单来说,
服务器端需要做的工作有:
1.创建套接字(socket函数)
2.锁定IP地址和端口(bind函数)
3.监听进入的链接(listen函数)
4.接受连接(accept函数)
5.收发数据(send/recv函数)
6.关闭连接(closesocket函数)
客户端需要的做的工作有:
1.创建套接字(socket函数)
2.连接到服务器端(connect函数)
3.收发数据(send/recv函数)
4.关闭连接(closesocket函数)
以下是一个简单的例子,代码是从网上找来的。但是感觉有些地方写的不够好,就稍微修改了一些地方,也勉强算原创吧。如下:
以上是服务器端的代码,下面是客户端的代码:
这里面有几个地方需要注意一下:
1.这是windows控制台程序(console application)
2.Server.cpp中,有这样一行代码:
LocalAddr.sin_addr.s_addr = INADDR_ANY;
这样,在后面调用bind()函数的时候,程序就会把ServerSocket绑定在本电脑的IP地址上。当然,我们也可以指定一个固定的IP地址,就比如说程序中注释起来的两行代码:
#define IP_ADDRESS "127.0.0.1"
LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
不过,个人感觉用INADDR_ANY是最好的了,因为后者只能和客户端在同一台电脑上测试的时候才能正常运行,如果服务器端和客户端在不同的电脑上,后者就不行了。而前者即INADDR_ANY是一直行的。
3.Client.cpp中利用下面的代码进行参数的检查:
if(argc != 2)
{
fprintf(stderr, "usage: %s <IP>/n", argv[0]);
ExitProcess(1);
}
假设客户端的可执行程序为clientSocket.exe,那么运行的时候应该遵循这样的格式:
clientSocket IP
这里的IP指的是服务器端的IP地址。
我使用VC6.0编译器编译了源代码,生成的可执行文件完全可用,呵呵。
转载自:http://canmeng.blog.51cto.com/2589556/536047,其附件中包含源代码。