孙鑫网络编程code

服务器端

/*基于TCP面向连接的 服务器*/
#include <iostream>  
#include <WinSock2.h>  
#include <stdlib.h>  
#include <Ws2tcpip.h>
#pragma comment(lib,"Ws2_32.lib")	//使用动态链接库用到
using namespace std;
#define _WINSOCK_DEPRECATED_NO_WARNINGS
void main()
{
	//加载套接字  
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(1, 1);

	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0)
	{
		return;
	}
	if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
	{
		WSACleanup();	//关闭套接字
		return;
	}

	//创建用于监听的套接字  
	SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);	//0自动选择协议

	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_port = htons(6000);

	//绑定套接字  
	bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
	//将套接字设置为监听模式  
	listen(sockSrv, 5);

	SOCKADDR_IN addrClient;	//调用accept的时候先定义一个地址结构体的变量,用来接收客户端的地址信息
	int len = sizeof(SOCKADDR);

	while (1)	//服务器应该永远等待为客户端服务
	{
		//等待客户的请求到来  
		SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
		char sendBuf[100];	//
		//char sendBuf[20] = {'\0'};
		//inet_ntop(AF_INET,(void*)&addr2.sin_addr,sendBuf,16);
		sprintf_s(sendBuf, 100, "Welcome %s to www.sunxin.org", inet_ntop(AF_INET,&addrClient.sin_addr,sendBuf,16));
		//调用sprintf将一个数据格式化到buffer当中								//取地址
		//发送数据  
		send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);
		char recvBuf[100];	//用来接收的字符数组
		//接受数据  
		recv(sockConn, recvBuf, 100, 0);
		//打印接受的数据  
		printf("%s\n", recvBuf);
		//关闭套接字  
		closesocket(sockConn);
	}
}

客户端

/*基于TCP面向连接的 客户端*/
#include <iostream>  
#include <WinSock2.h>  
#include <stdlib.h>  
#include <Ws2tcpip.h>
#pragma comment(lib,"Ws2_32.lib")	//使用动态链接库用到
using namespace std;
#define _WINSOCK_DEPRECATED_NO_WARNINGS
void main()
{
	//加载套接字  
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(1, 1);

	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0)
	{
		return;
	}
	if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
	{
		WSACleanup();	//关闭套接字
		return;
	}
	SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);//创建套接字
	
	SOCKADDR_IN addrSrv;
	struct in_addr s;  // IPv4地址结构体
	inet_pton(AF_INET, "127.0.0.1", (void*)&addrSrv.sin_addr.S_un.S_addr);
	//addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_port = htons(6000);
	connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

	char recvBuf[100];
	recv(sockClient, recvBuf, 100, 0);
	printf("%s\n", recvBuf);
	send(sockClient, "This is zhangsan", strlen("This is zhangsan")+1,0);

	closesocket(sockClient);
	WSACleanup();//终止对套接字库的使用

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值