我有一个客户端源代码,通过互联网连接到服务器
当我跟踪代码时,它会在编译器运行发送代码时向我显示SIGPIPE错误。我的问题在哪里?
我更改了发送方法,如评论所说并使用了strcpy
但我又错了。
#include <QCoreApplication>
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
#include <string> /*To use string type*/
#include <iostream>
#include <string>
#include <QChar>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <typeinfo>//for print the type typeid(a).name --> int
#include <string>
#include <arpa/inet.h>
#include <signal.h>
//#include <pthread.h> //make thread
using namespace std ;
//________________
#define bufsize 100
int sock;
struct sockaddr_in server;
string str;
char* message = new char[bufsize];
char* server_reply = new char[bufsize];
void RECV()
{
memset(&server_reply,'\0',bufsize);
int a=recv(sock , server_reply ,bufsize , 0);
cout<<a;
if(server_reply[0]!='\0')
cout<<server_reply<<endl;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
sock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);//0
if (sock == -1)
{
printf("Could not create socket");
}
puts("Socket created");
server.sin_addr.s_addr = inet_addr("example.com");//
server.sin_family = AF_UNSPEC;//AF_INET;
server.sin_port = htons( 3490 );
//Connect to remote server
if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
{
perror("connect failed. Error");
return 1;
}
puts("Connected\n");
puts("Bienvenido al Chatroom, puedes empezar a escribir en la sala!");
strcpy(message,"Hi");
signal(SIGPIPE, SIG_IGN);
if((send(sock , message , strlen(message)+1 , 0))<0)
{
perror("send");
exit(1);
}
RECV();
close(sock);
return a.exec();
}
答案 0 :(得分:0)
在两个if (r.test(pin) && (pin.length == 4 || pin.length == 6)) {
调用中,您传递的是指针的地址而不是指针本身。由于memset
为bufsize
,因此这些100
调用会破坏其他内存。那时,任何数量的坏事都可能发生。
以下是我的代码版本,但未获得memset
。最值得注意的是,SIGPIPE
已更改为AF_UNSPEC
。
AF_INET