Linux C/C++实现socket传输任意字符串(基于TCP实现)

C++实现 socket 传输任意字符串,在网上看到了许多很不错的代码,但大都是一端发送字符串,另外一端循环接收字符串,并没有对字符串的长度进行比较,试想:若在传完字符串后,还有其他的数据传送,那么在这样的情况下,接收端循环接收字符串就存在很大的弊端,因此在这里实现的是先将字符串的长度传送到接收端,而后紧接着传输字符串本身,这样在接收端就能先接收到字符串的长度,然后根据接收的长度接收字符串本身的数据。

客户端实现如下:

client.cpp

#include <iostream>
#include <signal.h>
#include <string>
#include <stdio.h>
#include "TCPClient.h"

TCPClient tcp;

using namespace std;

void sig_exit(int s)
{
        tcp.exit();
        exit(0);
}

int main(int argc, char *argv[])
{
        string message;
        getline(cin,message);

        signal(SIGINT, sig_exit);

        tcp.setup("127.0.0.1",11999);
        tcp.Send(message);
        string rec = tcp.receive();
        if( rec != "" )
        {
                cout << "Server Response:" << rec << endl;
        } 
        return 0;
}

TCPClient.cpp

#include "TCPClient.h"

TCPClient::TCPClient(){
	sock = -1;
	port = 0;
	address = "";
}

bool TCPClient::setup(string address , int port){
  	if(sock == -1)
	{
		sock = socket(AF_INET , SOCK_STREAM , 0);
		if (sock ==
实现TCP连接传输JSON字符,可以使用C++中的socket编程。以下是一个简单的示例代码: ```cpp #include <iostream> #include <string> #include <cstring> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> #include <json/json.h> using namespace std; int main() { // 创建socket int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { cerr << "socket creation failed" << endl; return -1; } // 服务器地址和端口号 string ip = "127.0.0.1"; int port = 8888; // 初始化服务器地址 struct sockaddr_in serverAddr; memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr(ip.c_str()); serverAddr.sin_port = htons(port); // 连接服务器 if (connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) { cerr << "connect failed" << endl; close(sock); return -1; } // 准备要发送的JSON数据 Json::Value data; data["name"] = "John"; data["age"] = 28; data["gender"] = "male"; string jsonStr = data.toStyledString(); // 发送JSON数据 const char* msg = jsonStr.c_str(); int len = strlen(msg); if (send(sock, msg, len, 0) != len) { cerr << "send failed" << endl; close(sock); return -1; } // 关闭socket close(sock); return 0; } ``` 代码中使用了Jsoncpp库来生成JSON字符串,如果没有安装该库,可以通过以下命令进行安装: ```bash sudo apt-get install libjsoncpp-dev ``` 该示例代码连接了本地IP为127.0.0.1,端口号为8888的服务器,并发送了一个包含姓名、年龄和性别的JSON数据。在实际应用中,需要根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值