TCP/IP C++实现实验

根据CSDN大神的代码修改之后,增加备注换成了C++的代码实现功能。

正在补充备注信息。实在是太多了。

#include<WinSock2.h>
#include<iostream>
#include<cstdio>
#include<stdlib.h>
using namespace std;
//静态加入一个lib文件,库文件
//parama comment 编译指示文件表述 
#pragma comment(lib , "ws2_32.lib")

int main() {
	WSADATA WsaData;//存放Windows socket初始化信息// 
	int port = 5099;//自定义端口号//
	
	char buf[] = "Server: hello , I am Bonstop!";//发送数据//
	 
	if(WSAStartup(MAKEWORD(2 , 2) , &WsaData) != 0) {//这个是个什么意思?// 
		printf("Failed to load Winsock");
		return 0;	
	}

	//创建用于监听的套接字//
	//监听
	//套接字
	SOCKET sockSrv = socket(AF_INET , SOCK_STREAM , 0);//套接字// 
	
	SOCKADDR_IN addrSrv;
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_port = htons(port);//1024以上的端口号//
	addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	
	int retVal = bind(sockSrv , (LPSOCKADDR)&addrSrv , sizeof(SOCKADDR_IN));//本地地址和一套接口捆绑// 
	if(retVal == SOCKET_ERROR){
		printf("Failed bind:%d\n" , WSAGetLastError());
		return 0;
	} 
	if(listen(sockSrv , 10) == SOCKET_ERROR) {
		printf("Listen failed:%d" , WSAGetLastError());
		return 0;
	}
	
	SOCKADDR_IN addrClient;
	int len = sizeof(SOCKADDR);
	
	while(1){
		//等待客户请求到来//
		SOCKET sockConn = accept(sockSrv , (SOCKADDR *) &addrClient , &len);
		if(sockConn == SOCKET_ERROR) {
			printf("Accept failed:%d" , WSAGetLastError());
			break;
		}
		
		printf("Accept client IP:[%s]\n" , inet_ntoa(addrClient.sin_addr));
		
		//发送数据//
		int isSend = send(sockConn , buf , sizeof(buf) , 0);
		if(isSend == SOCKET_ERROR) {
			printf("send failed");
			break;
		}
		
		char recvBuf[100];
		memset(recvBuf , 0 , sizeof(recvBuf));
		//接受数据//
		recv(sockConn , recvBuf , sizeof(recvBuf) , 0);
		printf("%s\n" , recvBuf);
		
		closesocket(sockConn);	
	}
			 
	closesocket(sockSrv);
	WSACleanup();
	system("pause"); 
} 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值