利用c++写简单的客户端服务器端程序

3 篇文章 0 订阅

客户端

(编译环境:VS 2012)
PS:注意,client客户端,连接IP记得要改成自己电脑的IP,不然会一直connect失败。

如何获取自己的IP
打开cmd ,进去之后在控制台输入 ipconfig/all 找到ipv4的地址,改了就行了,因为我这是连接的ipv4。
具体的函数参数不懂可以直接百度,我就不赘述了,希望能让各位学习到一二。

CLIENT客户端
#include "stdafx.h"
//网络通信WINDOWS下头文件
#include<winsock2.h>
//网络通信的windows下的库文件

#define PORT 5000

#pragma comment(lib,"ws2_32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
	//初始化WSA
	WORD sockVersion = MAKEWORD(2, 2);
	WSADATA wsaData;
	if (WSAStartup(sockVersion, &wsaData) != 0)
	{
		return 0;
	}
	//打开lib 库.
	

	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(sockfd < 0)
	{
		printf("socket err\n");
		return -1;
	} //检测是否报错
	printf("create socket succes\n");

	struct sockaddr_in serAddr;
	memset(&serAddr,0,sizeof(serAddr));//清空结构体做初始化
	
	//sin_family使用IPV4
	serAddr.sin_family = AF_INET; 	// 使用IP地址家族 //IPV4	
	//sin_port端口号
	serAddr.sin_port = htons(PORT); 	/* short, NBO*/
	//sin_addr服务器的Ip地址
	serAddr.sin_addr.S_un.S_addr= inet_addr("192.168.1.104");

	// linux底下是这样[serAddr.sin_addr.s_addr = inet_addr("192.168.0.104");]
	
	int res = connect(sockfd, (struct sockaddr*)&serAddr , sizeof(serAddr));
	if(res < 0)
	{
		printf("connect err\n");
		return -1;
	} //检测是否报错
	printf("connect server succes\n");

	char sendBuf[100] = {0};
	strcpy(sendBuf,"hello");
	
	res = send(sockfd,sendBuf,strlen(sendBuf),0);
	if(res < 0)
	{
	
		printf("send err\n");
		return -1;
	}
	printf("send succes=[%s] \n",sendBuf);


	closesocket(sockfd);
	return 0;
}

服务器端

下面展示一些 内联代码片

#include "stdafx.h"
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")

#define PORT    5000

int _tmain(int argc, _TCHAR* argv[])
{
	//初始化WSA
	WORD sockVersion = MAKEWORD(2, 2);
	WSADATA wsaData;
	if (WSAStartup(sockVersion, &wsaData) != 0)
	{
		return 0;
	}
	//打开lib 库.

	//1.创建socket.
	int sockfd = socket(AF_INET,SOCK_STREAM,0);// 使用什么网络,使用什么协议
	if(sockfd < 0)
	{
		printf(" create socket err \n");
		return -1;
	}
	printf(" create socket succses \n");

	//创建结构体,写入链接参数
	struct sockaddr_in serAddr;
	memset(&serAddr, 0, sizeof(serAddr));

	serAddr.sin_family = AF_INET; 	// 使用IP地址家族	
	
	serAddr.sin_port = htons(PORT); 	/* short, NBO*/
	
	serAddr.sin_addr.S_un.S_addr = INADDR_ANY;//微软提供的服务器端的自动获取本机ip的宏,客户端没用。
	

	int res=bind(sockfd,(struct sockaddr*)&serAddr,sizeof(serAddr));
	if(res < 0)
	{
		printf(" create bind err \n");
		return -1;
	}
	printf(" create bind succses \n");

	res = listen(sockfd,10);//监听用哪个sokect载体,最多监听几个?
	if(res < 0)
	{
		printf(" create listen err \n");
		return -1;
	}
	printf(" create listen succses \n");

	//accept函数是一个阻塞函数
	int newLink = accept(sockfd,NULL,NULL);
	if(newLink < 0)
	{
		printf(" accept err \n");
		return -1;
	}
	printf(" accept succses \n");

	//在服务器端,用新的链路进行新的链接。
	//为什么不用sockfd? 因为这个还要用来监听其他的客户端。
	char recvBuf[100] = {0};
	res = recv(newLink,recvBuf,5,0); //有坑。
	if(res < 0)
	{
		printf("recv err \n");
		return -1;
	}
	printf("recv data = [%s]\n", recvBuf);

	closesocket(newLink);
	closesocket(sockfd);

	return 0;
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值