socket编程--非实时通信

只是实现简单的功能而已

效果图:

socket编程--非实时通信

server.cpp

//服务器端
#include<iostream>
#include <WinSock2.h>
#include <stdio.h>
#include<string>
#pragma comment(lib,"WS2_32.lib")
using namespace std;


void main()
{
	WSADATA wsd;
	SOCKET server;                                            //服务器socket
	SOCKADDR_IN addrSrv;
	char sendBuf[100];
	char recvBuf[100];
	SOCKADDR_IN addrClient;
	SOCKET client;                                            //连接的客户端socket
	int len;
	if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
	{
		printf("start up failed!\n");
		return;
	}
	server = socket(AF_INET, SOCK_STREAM, 0);                   //创建socket
	addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);           //设置地址  INADDR_ANY转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP,因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思
	addrSrv.sin_family = AF_INET;                               //ipv4
	addrSrv.sin_port = htons(6000);                             //设置端口号

	bind(server, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));        //绑定    实际编程中,sockaddr_in强制转换成sockaddr指针 

	listen(server, 5);                                          //设置最多连接数
	len = sizeof(SOCKADDR);
	client = accept(server, (SOCKADDR*)&addrClient, &len);      //接收客户端连接
	string input;
	while (1)
	{

		cout << "请输入" << endl;
		cin >> input;                                  //输入数据
		const char* p = input.data();                  //string强制转换成const char*
		send(client, p, strlen(p) + 1, 0);             //发送信息客户端

		cout << "正在接收" << endl;
		recv(client, recvBuf, 100, 0);                //接收客户端数据
		cout << recvBuf << endl;                      //输入数据
	

	}
	closesocket(client);       //关闭连接,关闭套接字
	WSACleanup();  //释放套接字资源
}

client.cpp

//客户端
#pragma warning(disable:4996) 
#include<iostream>
#include <winsock2.h>
#include <stdio.h>
#include<string>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
void main()
{
	WSADATA wsd;
	SOCKET sockClient;                                            //客户端socket
	SOCKADDR_IN addrSrv;
	char recvBuf[100];
	char sendBuf[100];
	if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
	{
		printf("start up failed!\n");
		return;
	}
	sockClient = socket(AF_INET, SOCK_STREAM, 0);                 //创建socket
	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));    //连接服务器端
	
	string input;
	while (1)
	{
		cout << "正在接收" << endl;
		recv(sockClient, recvBuf, 100, 0);     //接收服务器端数据
		cout << recvBuf << endl;               //输出接收到的数据

		cout << "请输入" << endl;
		cin >> input;                          //输入数据
		const char* p = input.data();          //string强制转换成const char*
		send(sockClient, p, strlen(p) + 1, 0); //向服务器端发送数据
	}
	closesocket(sockClient);                   //关闭连接
	WSACleanup();                              //释放套接字资源
	
	system("pause");
}