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 ==