windows Socket + tcp 简单实例
来源:互联网 发布:java培训班都找到工作 编辑:程序博客网 时间:2024/05/22 10:43
/* Windows Socket +tcp 服务器端
* 创建socket:
*SOCKET socket (int af, int type, int protocol);
*第一个参数af: 表示族地址,网络编程一般使用AF_INET宏。
*第二个参数type: 表示连接类型,TCP选面向连接SOCK_STREAM,UDP选数据报SOCK_DGRAM。
*第三个参数protocol: 表示协议,使用AF_INET族地址TCP连接时,设为IPPROTO_TCP。
*
*监听socket:
*int listen(SOCKET s, int nQueueSize);
*第一个参数: 监听的socket。
*第二个参数: 套接字监听队列最大连接请求数。
*该函数将监听对socket的连接请求。
*
*请求连接:
*int connect(SOCKET s,const struct sockaddr *saddr,int namelen) ;
*第一个参数: socket本地进程的socket。
*第二个参数: 对应AF_INET,对方IP,端口等socket地址标识sockaddr_in。
*第三个参数: 对应AF_INET,使用sockaddr_in结构大小。
*
*
*接受连接请求:
*SOCKET accept(SOCKET s, struct sockaddr *addr, int *addrlen);
*第一个参数: socket为被监听的socket。
*第二个参数: 对应AF_INET,一个sockaddr指针,将写入发送请求方的sockaddr_in信息。
*第三个参数: 对应AF_INET,sockaddr_in结构体的大小。
*该函数用于接受一个socket连接请求,返回一个新的连接socket(实质是请求方的socket),发送与接收数据通过这个连接套socket。
*
*发送数据:
*int send(SOCKET s, const char *buf, int len, int flags );
*第一个参数: socket为对方的socket。
*第二个参数: 发送数据的缓冲区。
*第三个参数: 数据缓冲区大小。
*第四个参数: 紧急状态,一般这为0。
*该函数用于向对方socket发送数据,成功返回发送数据的大小数。
*
*发送数据:
*int recv(SOCKET s, char *buf, int len, int flags);
*第一个参数: socket为对方的socket。
*第二个参数: 接收数据的缓冲区。
*第三个参数: 缓冲区大小。
*第四个参数: 紧急状态,一般这为0。
*该函数用于接收对方发送的数据,成功返回发送数据的大小数。
*
*关闭套接字:
*int closesocket(SOCKET s);
*参数为socket。
*该函数用于关闭套接字。
*/
//服务器端
#include <stdio.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")int main(){ SOCKET serversoc; SOCKET clientsoc; SOCKADDR_IN serveraddr; SOCKADDR_IN clientaddr; char buf[1024]; int len; WSADATA wsa; WSAStartup(MAKEWORD(2,0),&wsa); if((serversoc = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) <= 0) { printf("套接字socket创建失败!\n"); return -1; } serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(9102); serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); if (bind(serversoc,(SOCKADDR*)&serveraddr,sizeof(serveraddr)) != 0) { printf("套接字绑定失败!\n"); return -1; } printf("开始监听\n"); if (listen(serversoc,1) != 0) { printf("监听失败!\n"); return -1; } len = sizeof(SOCKADDR_IN); if ((clientsoc = accept(serversoc,(SOCKADDR *)&clientaddr,&len)) <= 0) { printf("接受连接失败!\n"); return -1; } printf("连接成功\n"); while(1) { if (recv(clientsoc,buf,1024,0) <= 0) { printf("关闭连接\n"); closesocket(clientsoc); } printf("接受来自客户端的信息:%s\n",buf); break; } printf("请输入发送给客户端的字符:\n"); scanf("%s",buf); if (send(clientsoc,buf,strlen(buf)+1,0) <= 0) { printf("发送错误!\n"); } getchar(); WSACleanup(); return 0;}
//客户端
#include <stdio.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")int main(){ SOCKET clientsocket; SOCKADDR_IN serveraddr; SOCKADDR_IN clientaddr; char buf[1024]; WSADATA wsa; WSAStartup(MAKEWORD(2,0),&wsa); if ((clientsocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) <= 0) { printf("套接字socket创建失败!\n"); return -1; } serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(9102); serveraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); printf("尝试连接中..\n"); if (connect(clientsocket,(SOCKADDR*)&serveraddr,sizeof(serveraddr)) != 0) { printf("连接失败!\n"); return -1; } printf("连接成功!\n"); printf("请输入发送给服务器的字符:\n"); scanf("%s",buf); if (send(clientsocket,buf,strlen(buf)+1,0) <= 0) { printf("发送错误"); } while(1) { if (recv(clientsocket,buf,1024,0) <= 0) { printf("关闭连接!\n"); closesocket(clientsocket); } printf("接受来自服务器的信息:%s\n",buf); break; } getchar(); closesocket(clientsocket); WSACleanup(); return 0;}
- windows Socket + tcp 简单实例
- windows socket 简单实例
- windows socket 编程实例--TCP
- Socket TCP【简单聊天实例】
- vc socket tcp编程的简单实例
- Socket编程(二)---TCP简单实例
- 简单的Windows Socket编程实例
- Windows下socket简单的编程实例
- windows socket 编程实例--TCP(2007-07-28 14:33)
- 简单的基于Socket的TCP编程实例
- Linux C Socket编程原理及tcp, udp简单实例
- AVA实现基于Tcp协议的简单Socket通信实例
- 基于Tcp协议的简单Socket通信实例(JAVA)
- 基于Tcp协议的简单Socket通信实例(JAVA)
- socket TCP通信实例
- java tcp socket实例
- linux TCP socket 实例
- Tcp Socket编程实例
- Javascript 笔记一:Fetch
- 量化矩阵选取笔记
- ajax数据交互
- HDU 1166(线段树,单点加减 询问区间和)
- free -g问题,-/+ buffers/cache中 free过小有影响吗,怎么降低
- windows Socket + tcp 简单实例
- JS获取屏幕、页面大小、分辨率
- 利用java语言实现自定义队列与栈
- 【JZOJ 5276】【清华集训2017模拟】神奇的玩具
- C++基础知识
- Linux系统中的常用命令总结
- 单词接龙codevs1018(noip2000)
- LitePal 1.6.0版本来袭,数据加解密功能保障你的应用数据安全
- Java:利用接口实现打印机案例(墨盒有彩色和黑白色,纸张有A4纸和B5纸)