Server发消息,Client接收消息|windows网络编程

在这里插入图片描述

client.cpp
#include<Winsock2.h>
#include<stdio.h>
#include <WS2tcpip.h>
#pragma comment(lib,"ws2_32.lib")  //添加库文件WindowsSocket2.0版本32位,库是编译好的二进制代码
#pragma warning(disable:4996)
//服务器端口号为5050
#define DEFAULT_PORT  5050
#define DATA_BUFFER   1024
int main(int argc,char *argv[])
{
	WSADATA wsaData;
	SOCKET sClient;
	int iPort = DEFAULT_PORT;  
	int iLen;//从服务器端接收的数据长度
	char buf[DATA_BUFFER];//接收数据的缓冲
	struct sockaddr_in ser;//服务器端地址
	//判断输入的参数是否正确
	//if (argc < 2)
	//{
	//	printf("Usage:client[Server IP sddress]\n");
	//	return 0;
	//}
	printf("----------------------------\n");
	printf("client\n");
	printf("----------------------------\n");

	//接收数据的缓冲区初始化
	memset(buf, 0, sizeof(buf));
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		printf("Failed to load Winsock.\n");
		return 0;
	}
	//填写要连接的服务器地址信息
	ser.sin_family = AF_INET;
	ser.sin_port = htons(iPort);
	ser.sin_addr.s_addr = inet_addr("127.0.0.1");
	//建立客户端流式套接口
	sClient = socket(AF_INET, SOCK_STREAM, 0);
	if (sClient == INVALID_SOCKET)
	{
		printf("socket( ) Failed:%d\n", WSAGetLastError());
		return 0;
	}
	//请求与服务器端建立TCP连接
	if (connect(sClient, (struct sockaddr*)&ser, sizeof(ser)) == INVALID_SOCKET)
	{
		printf("connect( ) Failed:%d\n", WSAGetLastError());
		return 0;
	}
	else
	{
		printf("连接成功!");
	}

	while (1)
	{
		//从服务器端接收数据
		iLen = recv(sClient, buf, sizeof(buf), 0);
		if (iLen == 0)
			return 0;
		else if (iLen == SOCKET_ERROR)
		{
			printf("recv( ) Failed:%d\n", WSAGetLastError());
			return 0;
		}
		printf("recv( ) data from server:%s\n", buf);
	}
	closesocket(sClient);
	WSACleanup();
	getchar();
	printf("Hello");
	system("pause");
	return 0;
}

server.cpp
#include <WinSock2.h>   //WindowsSocket2.0版本
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#include <WS2tcpip.h>
#include <string.h>
#pragma warning(disable:4996)
#pragma comment(lib,"ws2_32.lib")  //添加库文件WindowsSocket2.0版本32位,库是编译好的二进制代码
#define DEFAULT_PORT 5050

int main(void) 
{
	int iPort = DEFAULT_PORT;
	WSADATA wasData;//创建一个结构体
	WORD wdVersion = MAKEWORD(2, 2);
	SOCKET sListen, sAccept;
	int iLen; //客户地址长度
	int iSend; //发送的数据长度
	char buf[] = "I am a server";  //要发送给客户的信息
	struct sockaddr_in ser, cli;   //服务器和客户的地址
	printf("----------------------------\n");
	printf("Server waiting\n");
	printf("----------------------------\n");
	if (WSAStartup(wdVersion, &wasData)!=0)
	{
		printf("Falied to load Winsock.\n");
		return -1;
	}
	//创建服务器端套接口
	sListen = socket(AF_INET, SOCK_STREAM, 0);
	if (sListen == INVALID_SOCKET)
	{
		printf("socket() Failed:%d\n", WSAGetLastError());
		return -1;
	}
	ser.sin_family = AF_INET;  //建立服务器端地址
	ser.sin_port = htons(iPort);  //htons()函数吧一个双字节主机顺序转换为网络字节顺序数
	//使用系统指定的IP地址INADDR_ANY
	ser.sin_addr.s_addr = htonl(INADDR_ANY);  //htonl( )函数把一个四字节主机字节顺序的数转换为网络字节顺序的数
	if (bind(sListen, (LPSOCKADDR)&ser, sizeof(ser)) == SOCKET_ERROR)
	{
		printf("bind( ) Failed: %d\n", WSAGetLastError());
		return -1;
	}
	//进入监听状态
	if (listen(sListen, 5) == SOCKET_ERROR)
	{
		printf("listen( ) Failed:%d\n", WSAGetLastError());
		return -1;
	}
	//初始化客户地址长度参数
	iLen = sizeof(cli);
	//进入一个无限循环,等待客户的连接请求
	sAccept = accept(sListen, (struct sockaddr*)&cli, &iLen);
	if (sAccept == INVALID_SOCKET)
	{
		printf("accept( ) Failed: %d\n", WSAGetLastError());
		return -1;
	}
	else
	{
		printf("建立连接成功!");
	}
	//输出客户IP地址和端口号
	printf("Accepted client IP:[%s],port:[%d]\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));
	//给连接的客户发送信息
	while (1)
	{
		iSend = send(sAccept, buf, sizeof(buf), 0);
		if (iSend == SOCKET_ERROR)
		{
			printf("send( ) Failed.:%d\n", WSAGetLastError());
			break;
		}
		else	if (iSend == 0)
			printf("isend==0");
		//break;
		else
		{
			printf("send( ) byte:%d\n", iSend);
			printf("-------------------------------\n");
		}
		//closesocket(sAccept);
		printf("发送成功,再次输入消息:");
		//scanf("%s", buf);
		char c = getchar();
		int i = 0;
		while (c != '\n')
		{
			buf[i] = c;
			c = getchar();
		}
		printf("The send data is:%s", buf);
	}
	closesocket(sListen);
	WSACleanup();
	system("pause");
	return 0;
}


猜你喜欢

转载自blog.csdn.net/weixin_43118073/article/details/105276238