当前位置: 技术问答>linux和unix
linux socket recv 段错误
来源: 互联网 发布时间:2017-05-18
本文导语: 本帖最后由 yuan_nice 于 2014-05-11 17:03:48 编辑 本人在linux端做一个简单的socket客户端测试程序。 但是在运行过程中,执行到接收对方响应报文长度的代码处就报段错误 read_count = recv(g_bf_socket, buffer, 4, 0); 请高手帮忙...
但是在运行过程中,执行到接收对方响应报文长度的代码处就报段错误
read_count = recv(g_bf_socket, buffer, 4, 0);
请高手帮忙分析分析是什么导致,我真的看不出代码哪里有问题啊?如果去掉这行代码就什么问题都没有。
全部代码如下:
#include // for sockaddr_in
#include // for socket
#include // for socket
#include // for printf
#include // for exit
#include // for bzero
#include
#define BUFFER_SIZE 10240
/************************************************************************/
/* 客户端 */
/************************************************************************/
#define BIG_FRONT_END_IP ("192.168.10.146") //
#define BIG_FRONT_END_PORT 9999 //
int g_bf_socket; //
struct sockaddr_in g_bf_addr; //
int bf_init(); //初始化与xxx通信相关的定义
int bf_transaction(); //与xxx进行一次短连接,发送请求报文后接收响应报文
int bf_connect(); //连接xxx
const char tran12345[] =
{
"
xxxxxx
123456
xxxxxx
05
xxxxxx
01
xxx
xxxxxx
xxx
"};
int main(int argc, char **argv)
{
printf("start init...n");
//signal(SIGINT,SIG_IGN);
//signal(SIGPIPE,SIG_IGN);
//signal(SIGQUIT,SIG_IGN);
////signal(SIGTERM,EXIT);
//signal(SIGUSR1,SIG_IGN);
//signal(SIGCLD,SIG_IGN);
if ( bf_init() == -1 )
{
exit(1);
}
if ( bf_transaction() == -1 )
{
exit(1);
}
return 0;
}
int bf_init()
{
struct sockaddr_in client_addr;
bzero(&client_addr,sizeof(client_addr));
client_addr.sin_family = AF_INET; //internet协议族
client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址
client_addr.sin_port = htons(0); //0表示让系统自动分配一个空闲端口
g_bf_socket = socket(AF_INET, SOCK_STREAM, 0);
if ( g_bf_socket