读书人

socket 编程遇到的有关问题 求

发布时间: 2012-05-07 12:40:40 作者: rapoo

socket 编程遇到的问题 求高手指点
服务器端代码:
#include "socket_connect.h"
struct sockaddr_in server,sink_addr;
void socket_connect_init(int *sockfd,unsigned short port)
{
int sock;

int structlength;

memset((char *)&server,0,sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(port);

bzero(&sink_addr, sizeof(sink_addr));
sink_addr.sin_family = AF_INET;
sink_addr.sin_port = htons(port);
sink_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

if((sock = socket (AF_INET,SOCK_DGRAM,0)) < 0 ){
printf("socket create error!\n");
exit(1);
}

structlength = sizeof(server);
if( bind(sock,(struct sockaddr *) &server,structlength) < 0){
printf("socket bind error!\n");
perror("bind");
exit(1);
}
*sockfd = sock;
}
void socket_connect_recv(int sock,struct sockaddr_in *client,char *msg,int len)
{
memset(client,0,sizeof(struct sockaddr_in));
int structlength = sizeof(struct sockaddr_in);
int recvd = recvfrom(sock,msg,len,0,(struct sockaddr *) client,&structlength);
if(recvd < 0){
perror("recvfrom");
exit(EXIT_FAILURE);
}
else{
msg[recvd] = '\0';
}
}
void socket_connect_send(int sock,char *buff,int size){
//int structlength = sizeof(struct sockaddr_in);
//int snd = sendto(sock,msg,len,0,(struct sockaddr *) client,structlength);
int snd = sendto(sock, buff, size, 0, (struct sockaddr *)&sink_addr, sizeof(struct sockaddr));
if(snd < 0){
perror("sendto");
exit(1);
}
}

void socket_connect_close(int sockfd){
close(sockfd);
}
服务器端主函数:
#include <stdio.h>
#include "socket_connect.h"
int main(){

int sock;
struct sockaddr_in client;
char msg[20]="11111111";
socket_connect_init(&sock,8000);
while(1)
{

//socket_connect_recv(sock,&client,msg,sizeof(msg));
printf("The send msg is %s\n",msg);
socket_connect_send(sock,msg,sizeof(msg));
}
socket_connect_close(sock);
}
客户端代码:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>


#include <string.h>

#define PORT 8000 /* Server的端口 */
#define MAXDATASIZE 100 /*一次可以读的最大字节数 */

int main(int argc, char *argv[])
{

int sockfd, numbytes, sin_size;

char buf[MAXDATASIZE] = "Hello, world!";

struct sockaddr_in their_addr; /* 对方地址信息 */

if ((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
perror("socket");
exit(1);
}

their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(PORT);
their_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
bzero(&(their_addr.sin_zero), 8);
char i = 1;
while(i<10)
{
//numbytes = sendto(sockfd,buf,MAXDATASIZE,0,(struct sockaddr *)&their_addr,sizeof(their_addr));
//if (numbytes == -1)
//{
//perror("sendto");
//exit(1);
//}
//printf("Send: %s\n",buf);
numbytes = recvfrom(sockfd, buf, MAXDATASIZE, 0, (struct sockaddr *)&their_addr, &sin_size);

if (numbytes == -1)
{
perror("recvfrom");
exit(1);
}
buf[numbytes] = '\0';
printf("Received:%s\n",buf);
i++;
}
close(sockfd);

return 0;
}
程序运行的时候,我先运行服务器端的代码,然后再运行客户端的代码,但是客户端始终接受不到服务器端发过来的信息!不知道问题出现自那里,请高手给予指点!

[解决办法]
我肿么没看到服务器开"监听"的函数啊?
[解决办法]

探讨

我肿么没看到服务器开"监听"的函数啊?

[解决办法]
客户端没有bind,客户端每次发数据都用不同的端口(打一枪换一个地方)
当然收不到服务器端给的回应了。
[解决办法]
探讨

我是不是应该在客户端里面添加一个bind函数啊
引用:
引用:

我肿么没看到服务器开"监听"的函数啊?

这是UDP,不需要Listen

[解决办法]
。。。

楼主弄反了,服务端主送发包了。。。

客户端反而没有bind。。。
[解决办法]
common.h
C/C++ code
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <pthread.h>#include <fcntl.h>#include <errno.h>#include <signal.h>#include <linux/types.h>#include <sys/stat.h>#include <sys/types.h>#include <sys/time.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <ctype.h>static int init_listener(int *sd, int port){    struct sockaddr_in thisaddr;    *sd = socket(AF_INET, SOCK_DGRAM, 0);    memset(&thisaddr, 0, sizeof(thisaddr));    thisaddr.sin_family = AF_INET;    thisaddr.sin_addr.s_addr = htonl(INADDR_ANY);    thisaddr.sin_port = htons(port);        if(bind(*sd, (struct sockaddr *)&thisaddr, sizeof(thisaddr)) == -1) {        perror("bind error");        return -1;    }    return 0;} 

读书人网 >C语言

热点推荐