认识实习范例02-套接字编程.doc

上传人:ni****g 文档编号:557362423 上传时间:2023-04-16 格式:DOC 页数:8 大小:61KB
返回 下载 相关 举报
认识实习范例02-套接字编程.doc_第1页
第1页 / 共8页
认识实习范例02-套接字编程.doc_第2页
第2页 / 共8页
认识实习范例02-套接字编程.doc_第3页
第3页 / 共8页
认识实习范例02-套接字编程.doc_第4页
第4页 / 共8页
认识实习范例02-套接字编程.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《认识实习范例02-套接字编程.doc》由会员分享,可在线阅读,更多相关《认识实习范例02-套接字编程.doc(8页珍藏版)》请在金锄头文库上搜索。

1、程序阅读范例二:套接字编程,分server和Client两部分1) server.c - 简单 TCP/UDP 套节字服务器程序 windows环境/* server.c - 简单 TCP/UDP 套节字服务器程序 windows环境 */#include #include #include #include int main(void) unsigned short port= 5001;/端口号 int socket_type = SOCK_DGRAM;/缺省使用TCP连接 char Buffer1280;/收发缓冲区 int retval, fromlen, i, isconnected

2、 = 0;/临时变量 struct sockaddr_in local, from;/套节字地址结构变量 SOCKET listen_socket, msgsock;/套节字变量 WSADATA wsaData;/windows套节字信息/先输入服务器程序所需要的基本信息:端口号,套节字类型printf(请输入端口号( 5000 ):);scanf(%d, &i);if(i 65535)printf(不正确的端口号%d,用缺省端口号5001n,i);elseport = i;printf(请输入套节字类型( 1,TCP; 2, UDP ):);scanf(%d, &i);if(i = 1)so

3、cket_type = SOCK_STREAM;else if(i = 2)socket_type = SOCK_DGRAM;elseprintf(不正确的输入%d,使用TCP数据流n,i);/在windows环境下,需要先初始化协议栈 if (retval = WSAStartup(0x202, &wsaData) != 0) printf(WSAStartup 失败,错误号:%dn, retval); WSACleanup(); return -1; /建立套节字 listen_socket = socket(AF_INET, socket_type, 0); if (listen_soc

4、ket = INVALID_SOCKET) printf(socket()失败,错误号:%dn, WSAGetLastError(); 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_ER

5、ROR) printf(bind()失败,错误号:%dn, WSAGetLastError(); WSACleanup(); return -1; /对于流式套节字,让套节字处于监听状态,等待连接到来 if (socket_type != SOCK_DGRAM) if (listen(listen_socket,5) = SOCKET_ERROR) printf(listen()失败,错误号:%dn, WSAGetLastError(); WSACleanup(); return -1; printf(监听端口:%d, 使用协议:%sn, port,(socket_type = SOCK_ST

6、REAM)? TCP: UDP); while(1) fromlen =sizeof(from); if (socket_type = SOCK_DGRAM ) msgsock = listen_socket;else if( isconnected = 0)/对于TCP连接,如果没有连接,等待一个连接的到来 msgsock = accept(listen_socket,(struct sockaddr*)&from, &fromlen); if (msgsock = INVALID_SOCKET) printf(accept()失败,错误号:%dn,WSAGetLastError(); WS

7、ACleanup(); return -1; isconnected = 1; printf(从%s收到连接, 端口是:%dn, inet_ntoa(from.sin_addr), htons(from.sin_port); /等待接收网络信息 if (socket_type != SOCK_DGRAM) retval = recv(msgsock, Buffer, sizeof (Buffer), 0 ); /面向tcp,类似BSD read() else retval = recvfrom(msgsock, Buffer, sizeof (Buffer), 0, (struct socka

8、ddr *)&from, &fromlen);/面向UDP printf(从%s收到数据报,端口是:%dn, inet_ntoa(from.sin_addr), htons(from.sin_port); /结果判断 if (retval = SOCKET_ERROR) printf(recv()失败,错误号:%dn, WSAGetLastError(); closesocket(msgsock); continue; else if (retval = 0) printf(客户端关闭连接n); closesocket(msgsock); continue; else /正常接收printf(

9、收到 %d 字节的数据:%s n, retval, Buffer);if (socket_type != SOCK_DGRAM)/对于TCP连接,我们收到exit有一个关闭连接的操作if(!stricmp(Buffer, exit) printf(关闭TCP 连接,等待下一次连接.n);closesocket(msgsock);isconnected = 0;continue;/信息回送 printf(将同样的信息回送给客户端.nn); if (socket_type != SOCK_DGRAM) retval = send(msgsock, Buffer, strlen(Buffer)+1,

10、 0);/面向tcp,类似BSD write() else retval = sendto(msgsock, Buffer, strlen(Buffer)+1, 0, (struct sockaddr *)&from, fromlen);/面向UDP if (retval = SOCKET_ERROR) printf(send()失败,错误号:%dn, WSAGetLastError(); /程序的一个退出条件if(!stricmp(Buffer, quit)break; WSACleanup();return 0;2) client.c - 简单的 TCP/UDP 套节字客户程序 windo

11、ws环境/* client.c - 简单的 TCP/UDP 套节字客户程序 windows环境 */#include #include #include #include #include int main(void) unsigned short port = 5001;/端口号 int socket_type = SOCK_STREAM;/缺省使用TCP连接 char Buffer1280;/收发缓冲区 unsigned int addr;/IP地址变量 int retval,i;/临时变量 struct sockaddr_in server, from; /套节字地址结构变量 struct hostent *hp;/主机信息结构变量指针 WSADATA wsaData;/windows套节字信息 SOCKET conn_socket;/套节字变量/先输入客户程序所需要的基本信息:服务器地址,端口

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号