现在的位置: 首页 > 综合 > 正文

简单socket通信过程(TCP)

2013年02月03日 ⁄ 综合 ⁄ 共 1655字 ⁄ 字号 评论关闭

首先要链接库文件:Property->Linker->Input->Additional Dependencies中加入ws2_32.lib

或者代码里加入:#pragma comment(lib, "Ws2_32.lib")

先运行服务器端后运行客户端

// 服务器端
#include<iostream>
#include<WinSock2.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		return 0;
	}
	
	SOCKET sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	SOCKADDR_IN addrServer;
	addrServer.sin_family = AF_INET;
	addrServer.sin_port = htons(6000);
	addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	bind(sockServer, (const sockaddr*)&addrServer, sizeof(addrServer));

	listen(sockServer, 5);

	SOCKADDR_IN addrAccept;
	int nAddrLen = sizeof(addrAccept);

	SOCKET sockAccept = accept(sockServer, (sockaddr*)&addrAccept, &nAddrLen); //最后一个参数容易出错

	// 接受客户端数据
	char szRecvBuf[124] = {0};
	recv(sockAccept, szRecvBuf, 124, 0);
	cout << szRecvBuf << endl;

	// 将数据发往客户端
	char szSendBuf[] = "hello, client!";
	int nCount = sizeof(szSendBuf);
	send(sockAccept, szSendBuf, nCount + 1, 0);

	closesocket(sockAccept);
	closesocket(sockServer);
	WSACleanup();

	cin.get();
	return 0;
}
// 客户端
#include <iostream>
#include <WinSock2.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		return 0;
	}
	
	SOCKET sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	SOCKADDR_IN addrConnect;
	addrConnect.sin_family = AF_INET;
	addrConnect.sin_port = htons(6000);
	addrConnect.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	connect(sockClient, (const sockaddr*)&addrConnect, sizeof(addrConnect));

	// 发送数据到服务器端
	char szSendBuf[] = "hello, server!";
	int nCount = sizeof(szSendBuf);
	send(sockClient, szSendBuf, nCount + 1, 0);

	// 接受服务器端发送过来的数据
	char szRecvBuf[124] = {0};
	recv(sockClient, szRecvBuf, 124, 0);
	cout << szRecvBuf << endl;

	closesocket(sockClient);
	WSACleanup();

	cin.get();
	return 0;
}

抱歉!评论已关闭.