TCP Socket客户端编程(C++)

代码来源:《Windows网络编程》(罗莉琴,詹祖桥 主编)(如造成任何不便,请联系我删除)

// TcpClient.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <winsock2.h>
#include <string>
#include <iostream>

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

#define BUF_SIZE 64 //缓冲区大小


int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsd;//用于初始化Windows Socket
	SOCKET sHost;//与服务器进行通信的Socket
	SOCKADDR_IN servAddr;//服务器地址
	char buf[BUF_SIZE];//用于接受数据缓冲区
	int retVal;//调用各种Socket函数的返回值

	//---------初始化Socket-------------------
	if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
	{
		printf("WSAStartup failed !\n");
		return -1;
	}

	//--------------创建Socket----------------------------
	sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//(指定协议的地址家族,指定套接字的类型,套接字使用的协议)
	if (INVALID_SOCKET == sHost)
	{
		printf("socket failed !\n");
		WSACleanup();
		return -1;
	}

	//----------设置服务器的Socket地址---------------------
	servAddr.sin_family = AF_INET;
	servAddr.sin_port = htons(9990);
	servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

	int sServerAddlen = sizeof(servAddr);

	//--------------连接到服务器-----------------------------
	retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
	if (SOCKET_ERROR == retVal)
	{
		printf("connect failed!\n");
		closesocket(sHost);
		WSACleanup();
		return -1;
	}

	//信息交互
	while (true)
	{
		//向服务器发送数据
		printf("Please input a string to send:");
		std::string str;
		std::getline(std::cin,str);
		ZeroMemory(buf,BUF_SIZE);
		strcpy_s(buf,str.c_str());
		retVal = send(sHost,buf,strlen(buf),0);
		if (SOCKET_ERROR == retVal)
		{
			printf("send failed!\n");
			closesocket(sHost);
			WSACleanup();
			return -1;
		}

		//接收服务器回传的数据
		retVal = recv(sHost,buf,sizeof(buf)+1,0);
		printf("Recv From Server:%s\n",buf);

		if (strcmp(buf, "quit") == 0)
		{
			printf("quit!\n");
			break;
		}
	}

	//-----------释放资源------------------
	closesocket(sHost);
	WSACleanup();

	system("pause");


	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值