设为首页 加入收藏

TOP

C++结合TCP/IP协议 实现客户端和服务器通讯(一)
2018-05-26 14:13:59 】 浏览:736
Tags:结合 TCP/IP 协议 实现 客户端 服务器 通讯

借鉴,源码非原创,来自MagicSaring的一个简单的TCP通信程序Demo。

一、客户端源码:

#include 
  
   
#include 
   
     #include "client.h" using namespace std; #pragma comment(lib, "WS2_32.lib") //表示链接WS2_32.lib这个库。 #define PORT 1024 int connectToServer(char* send_msg) { SOCKET sock_client; struct sockaddr_in server_addr; int addr_len = sizeof(struct sockaddr_in); char msgbuffer[1000]; memset(msgbuffer, 0, sizeof(msgbuffer)); // 初始化 winsock2.dll[12/27/2017 MagicScaring] WSADATA wsaData; WORD wVersionRequested = MAKEWORD(2, 2); //生成版本号 if (WSAStartup(wVersionRequested, &wsaData) != 0) { cout << "加载 winsock.dll失败" << endl; return 0; } // 创建套接字 [12/27/2017 MagicScaring] if ((sock_client = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR) { cout << "创建套接字失败! 错误代码:" << WSAGetLastError() << endl; WSACleanup(); //注销WinSock动态链接库 return 0; } // 填写服务器地址 [本机地址] char IP[20] = { "192.168.1.106" }; /*char IP[20]; cout << "输入服务器地址:" << endl; cin >> IP;*/ memset((void*)&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = inet_addr(IP); // 与服务器建立连接 [2018/5/22] if (connect(sock_client, (struct sockaddr*)&server_addr, addr_len) == SOCKET_ERROR) { cout << "连接失败! 错误代码:" << WSAGetLastError() << endl; closesocket(sock_client); WSACleanup(); return 0; } while (true) { int size; if ((size = recv(sock_client, msgbuffer, sizeof(msgbuffer), 0)) == SOCKET_ERROR) { cout << "接收信息失败! 错误代码:" << WSAGetLastError() << endl; closesocket(sock_client); WSACleanup(); return 0; } else if (size == 0) { cout << "对方已关闭连接" << endl; closesocket(sock_client); WSACleanup(); return 0; } else { cout << "The message from Server:" << msgbuffer << endl; } //char send_msg[1000] = { "Hello server" }; //send_msg是要发送的数据,是char指针 if ((size = send(sock_client, send_msg, sizeof(send_msg), 0)) == SOCKET_ERROR) { cout << "发送信息失败! 错误代码:" << WSAGetLastError() << endl; } else if (size == 0) { cout << "对方已关闭连接" << endl; } else { cout << "信息发送成功" << endl; } } closesocket(sock_client); WSACleanup(); return 0; }
   
  

二、主程序调用

connectToServer(s_buf);

注意主程序头文件库的顺序,winSock2.h放在最前面。

至于为什么,I dont know.

三、服务器源码

#include "stdafx.h"
#include 
  
   
#include 
   
     using namespace std; #pragma comment(lib, "WS2_32.lib") //表示链接WS2_32.lib这个库。 #define PORT 1024 int main() { SOCKET sock_server, newsock; struct sockaddr_in server_addr, client_addr; char msg[] = { "Hello client" }; // 初始化 winsock2.dll[12/27/2017 MagicScaring] WSADATA wsaData; WORD wVersionRequested = MAKEWORD(2, 2); //生成版本号 if (WSAStartup(wVersionRequested, &wsaData) != 0) { cout << "加载 winsock.dll失败" << endl; return 0; } // 创建套接字 [12/27/2017 MagicScaring] if ((sock_server = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR) { cout << "创建套接字失败! 错误代码:" << WSAGetLastError() << endl; WSACleanup(); //注销WinSock动态链接库 return 0; } // 填写需要绑定的本地地址 [] int addr_len = sizeof(struct sockaddr_in); memset((void*)&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.s
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++下的const:const修饰变量、co.. 下一篇C++重载运算符和标准模板库实例讲..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目