【发布时间】:2015-06-21 07:55:48
【问题描述】:
tcp_socket()
{
sock = socket(AF_INET , SOCK_STREAM , 0);
if (sock == -1)
{
printf("Could not create socket\n");
}
puts("Socket created.......\n");
server.sin_addr.s_addr = inet_addr("172.210.110.10");
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
//Connect to remote server
con= connect(sock , (struct sockaddr *)&server , sizeof(server));
if(con<0)
{
perror("connect failed. Error\n");
return con;
}
puts("Connected\n");
err = pthread_create(&tid, NULL,reciever_port,(int*)sock);
if (err != 0)
printf("\ncan't create thread :[%s]", strerror(err));
else
printf("\n Thread created successfully\n");
return 1;
}
void *reciever_port(int sockid)
{
unsigned char inbuf[MAX_REQUEST_LINES]="";
while(1)
{
memset(inbuf, 0, sizeof(inbuf));
rc=recv(sockid , inbuf , 1024 , 0);
if(rc<0)
{
puts("waiting .........\n");
exit(0);
}
else
{
for(i=0;i<rc;i++)
{
printf("%c",inbuf[i]);
}
}
我已经打开了一个客户端套接字并使用pthread_create 调用函数reciever_port,其中reciever_port 一个while 循环不断接收,如果任何数据来自服务器,但它没有打印任何东西,无法正常工作,而没有线程它正在工作。
我错过了什么,或者有人可以指出我正确的方向吗?
【问题讨论】:
-
如果你将
(int*)作为参数传递给线程,你应该得到int*作为参数:void *reciever_port(void* arg) { int sockid = * (int*) arg; ... -
@myaut 这有点邪恶,因为
sizeof int不一定是sizeof void * -
我认为这是线程启动的问题,请确保您将参数正确传递给线程函数。换句话说,接收数据不是问题,您应该暂时忽略它。在这种情况下要查看的另一件事是
sock的范围:上面,它看起来像是全局的! -
@dhke,哦,我没注意到他没有取
sock的地址,而是直接传了。