..
/*******************************************************\\ * server.c - 简单 TCP/UDP 套接字服务器程序 windows环境 * \\*******************************************************/ #include
#pragma comment(lib,\添加库 int main(void) {
unsigned short port= 5001;
//端口号
//缺省使用TCP连接 //收发缓冲区
//临时变量
int socket_type = SOCK_DGRAM; char Buffer[1024];
int retval, fromlen, i, isconnected = 0;
a
..
struct sockaddr_in local, from; //套接字地址结构变量 SOCKET listen_socket, msgsock; //套接字变量 WSADATA wsaData;
//windows套接字信息
//先输入服务器程序所需要的基本信息:端口号,套接字类型 printf(\请输入端口号( >5000 ):\scanf(\if(i < 5000 || i > 65535) else
port = i;
printf(\不正确的端口号%d,用缺省端口号5001\\n\
printf(\请输入套接字类型( 1,TCP; 2, UDP ):\scanf(\if(i == 1)
socket_type = SOCK_STREAM;
else if(i == 2)
a
..
else
socket_type = SOCK_DGRAM;
printf(\不正确的输入%d,使用TCP数据流\\n\
//在windows环境下,需要先初始化协议栈
if ((retval = WSAStartup(0x202, &wsaData)) != 0) //初始化套接字版本等信息
{
printf(\失败,错误号:%d\\n\ WSACleanup();//在创建失败,或者程序结束,都要调用 return -1; }
//建立套接字
listen_socket = socket(AF_INET, socket_type, 0); if (listen_socket == INVALID_SOCKET)
{
a
..
printf(\失败,错误号:%d\\n\ WSACleanup(); return -1; }
// 拷贝 解析的信息到sockaddr_in结构中 local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY; local.sin_port = htons(port);
//邦定网络地址到套接字
if (bind(listen_socket,(struct sockaddr*)&local, sizeof(local) ) == SOCKET_ERROR) //绑定网络地址
{
printf(\失败,错误号:%d\\n\ WSACleanup(); return -1;
a
..
}
//对于流式套接字,让套接字处于监听状态,等待连接到来
if (socket_type != SOCK_DGRAM)
{
if (listen(listen_socket,5) == SOCKET_ERROR) //监听网络
{
printf(\失败,错误号:%d\\n\ WSACleanup(); return -1; } }
printf(\监听端口:%d, 使用协议:%s\\n\
(socket_type == SOCK_STREAM)? \
while(1)
{
a