socket编程

Windows下的socket编程

代码参考:
https://blog.csdn.net/lindamtd/article/details/79832835

https://blog.csdn.net/ckzhb/article/details/81632562

服务器端:

功能:
1、 监控端口,等待客户端的请求;(此socket用于监听)
2、 建立连接成功后,用于数据传输;(次socket用于传输数据)

1.加载套接字,创建套接字(WSAStartup()/socket)
(ps:  WSAStartup,即WSA(Windows Sockets Asynchronous,Windows异步套接字)的启动命令)

2.绑定套接字到一个IP地址和端口(bind())

3.将套接字设置为监听模式等待请求连接(listen())

4. 请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字

5. (accept());

6. 用返回的套接字和Client进行通信(send()/recv())

7. 返回,等待另一连接请求

9. 关闭套接字,关闭加载的套接字库(closesocket()/WSAClean())

客户端

1、加载套接字库,创建套接字(WSAStartup()/socket());

2、向服务器发出连接请求(connect());

3、和服务器端进行通信(send()/recv());

4、关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

MFC机制下利用CSocket

服务器端

		int main()
		{
			AfxSocketInit();  //初始化
			CSocket listenSocket, serverSocket;
			//创建套接字
			if (!listenSocket.Socket())    
			{
				char error[256] = {0};
				sprintf(error, "Create Faild: %d", GetLastError());
				AfxMessageBox(error);
				return 1; 
			}

			BOOL bOptVal = TRUE; 
			int bOptLen = sizeof(BOOL);
			listenSocket.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET);   //SO_REUSEADDR BOOL 允许套接口和一个已在使用中的地址捆绑

			// Bind
			if (!listenSocket.Bind(8888))    //   绑定端口号为8888  端口号0~65535   0~1024个为系统端口,1025~65535是为用户保留的端口
			{
				char error[256] = {0};
				sprintf(error, "Bind Faild: %d", GetLastError());
				AfxMessageBox(error);	
				return 1; 
			}

			// listen
			if(!listenSocket.Listen(10))    //10代表最大可连接数
			{	
				char error[256] = {0};
				sprintf(error, "Listen Faild: %d", GetLastError());
				AfxMessageBox(error); 
				return 1;
			}

			// Accept
			if(!listenSocket.Accept(serverSocket))
			{
				continue;
			}
			else
			{
				char recBuf[256] = {0};
				serverSocket.Receive(recBuf, strlen(recBuf)); //接收客户端内容:阻塞
				char sendBuf[256] = {"hello"};
				serverSocket.Send(sendBuf,strlen(sendBuf));
			}
			
			serverSocket.Close();
			listenSocket.Close();
		}
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);

sockfd:标识一个套接口的描述字。
level:选项定义的层次;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。
optname:需设置的选项。
optval:指针,指向存放选项待设置的新值的缓冲区。
optlen:optval缓冲区长度。

客户端

	AfxSocketInit();   //初始化
	CSocket sendSocket;
	sendSocket.Create();   //创建套接字
	socket.Connect(HOST_IP, HOST_PORT);  // 连接

	//连接建立,传输数据
	char recBuf[256] = {0};
	sendSocket.Receive(recBuf, strlen(recBuf)); //接收客户端内容:阻塞
	char sendBuf[256] = {"hello"};
	sendSocket.Send(sendBuf,strlen(sendBuf));

	sendSocket.Close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值