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 == -1)
		{
      		cout << "Could not create socket" << endl;
    	}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值