流式套接字 ---基于阻塞模式服务器与客户端实现

流式套接字 —基于阻塞模式服务器与客户端实现

1.先上代码后面进行解释

server服务器端
//使用vc6.0版本开发,以下所有库不需要导入全都是自带
#include "stdafx.h" //必须放在开头尝试过放在下面会引起printf等基础语句报未定义错误
#include <winsock2.h> //windows下socket(套接字)的函数库
#include <stdio.h>//基础函数库
//winsock有两个版本互相之间有一定的差别这里使用2.0版本需要1,0版本的可以去看csdn
#pragma comment(lib,"ws2_32.LIB")//连接到winsocket2的库文件
#define BUFFER_LEN 1024//定义一个宏变量 名字为“缓冲区”也可以在下面用到这个变量时直接写1024,但推荐用这个不容易出错
//程序入口(主函数)
int main(int argc, char* argv[])
{	
	WSADATA wsa_data;//初始化winsock2动态库
	WORD winsock_ver=MAKEWORD(2,0);//说明版本是2.0
	//WSAStartup是主要函数来自于winsock库内置函数,
	//作用:初始化版本告诉vc是2.0版本,1参是版本号,2参是结构体变量名具体在底层中,这里不用管
	//写下&wsa_data即可
	int ret = WSAStartup(winsock_ver,&wsa_data);
	SOCKET sock;//定义一个SOCKER类型的变量 变量名为sock
	//创建套接字socket为库函数自带,1参指名为ipv4协议,2参指明为流式套接字,三参指明为tcp可靠传输协议
	//多给一点知识:1参还可以为:AF_INET(ipv4);AF_INET6(ipv6);AF_IPX(IPX/spx)协议群
	//             2参还可以为:SOCK_STREAM(流式套接字);SOCK_DGRAM(数据报套接字);SOCK_RAW(原始套接字)
	//             3参还可以为IPPROTO_TCP(可靠传输);IPPROTO_UDP(不可靠传输)
	sock =socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	int port =7001;//设定端口,需要高于1024,低于1024为系统端口
	int addr_len=sizeof(SOCKADDR_IN);//找到大小
	SOCKADDR_IN addr_svr;
	addr_svr.sin_family=AF_INET;
	addr_svr.sin_port=htons(port);//从主机字节顺序变为网络字节顺序
	addr_svr.sin_addr.S_un.S_addr = INADDR_ANY;//表示绑定所有ip
	ret= bind(sock,(SOCKADDR*)&addr_svr,addr_len);//绑定地址1参为上一个得到的sock,2参指向地址,三参为长度
	ret=listen(sock,SOMAXCONN);//监听主机发消息没有SOMANXCONN表示系统定义的长度
	SOCKADDR_IN addr_clt;//定义这个变量是用来保存和服务器连接的客户端的端点地址
	SOCKET sock_clt=accept(sock,(SOCKADDR*)&addr_clt,&addr_len);//处理客户的连接请求accept为库函数
	char recvbuf [BUFFER_LEN];//接受缓冲区的大小
	char sendbuf [BUFFER_LEN];//发送缓冲区的大小
	int numRead;
	while(1){
		memset(recvbuf,0,BUFFER_LEN);//memset函数库函数用于清空缓冲区里的东西
		numRead=recv(sock_clt,recvbuf,BUFFER_LEN,0);//recv接受函数(库函数)一参为已经进行连接的套接字,二参是接收时缓冲区的大小,三参为最大多是,四参一般写为0
		if(numRead>0){
			printf("%s\n",recvbuf);//打印出从客户端的代码
			gets(sendbuf);
			send(sock_clt,sendbuf,strlen(sendbuf),0);//发送给客户端
			
		}
	}
	closesocket(sock_clt);//关闭已经进行连接的套接字
	closesocket(sock);//关闭创建时的套接字
	WSACleanup();//释放winsock2动态库
	return 0;
}

全自写,太累了,没吃饭,有时间在更新客户端有好奇心的同学可以加我qq794351617欢迎交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值