Re: some problem in UDP programming under linux



On Feb 26, 8:16 pm, s9327...@xxxxxxxxxxxxxxxx wrote:
Dear All :
I have some problem in UDP clinet programming, my source code
under line.

#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<stdlib.h>

#define PORT 65536

/*
** since port numbers range from 1 to 65535,
** the original port number of 65536 is out of range
** and will not work. Use a different port
*/
#define PORT 65534

#define SERVER_IP "10.l10.138.200"

/*
** The server IP must either be a legal dotted decimal
** number, or a DNS name. The original is neither.
** Use a corrected dotted decimal IP address
*/
#define SERVER_IP "10.10.138.200"


main()
{
int s,len;
struct sockaddr_in addr;
int addr_len = sizeof(struct sockaddr_in);
char buffer[256];
if ((s = socket(AF_INET, SOCK_DGRAM, 0))<0)
{
perror("socket");
exit(1);}

bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = inet_addr(SERVER_IP);
while(1)
{
bzero(buffer, sizeof(buffer));
len=read(STDIN_FILENO, buffer, sizeof(buffer));
sendto(s, buffer, len, 0, &addr, addr_len);


/*
** sendto() takes a generic sockaddr pointer, but we have a
** TCP/IP sockaddr_in pointer. Cast the sockaddr_in pointer to
** the generic sockaddr pointer, and continue.
*/
sendto(s, buffer, len, 0, (struct sockaddr *)&addr, addr_len);

len = recvfrom(s, buffer, sizeof(buffer), 0, &addr, &addr_len);


/*
** recvfrom() takes a generic sockaddr pointer, but we have a
** TCP/IP sockaddr_in pointer. Cast the sockaddr_in pointer to
** the generic sockaddr pointer, and continue.
*/
len = recvfrom(s, buffer, sizeof(buffer), 0 (struct sockaddr
*)&addr, &addr_len);

printf("receive: %s",buffer);

}
}

But I complier in Red Hat 9 have three bug
udpclient1.C: In function 'int main()'
udpclient1.C:34: cannot convert 'sockaddr_in*' to 'const sockaddr*'
for argument '5' to 'ssize_t sendto(int, const void*, unsigned int,
int, const sockaddr* . unsigned int)'
udpclient1.C:35: cannot convert 'sockaddr_in*' to 'const sockaddr*'
for argument '5' to 'ssize_t recvfrom(int, void*, unsigned int, int,
const sockaddr* . socklen_t*)'

HTH
--
Lew

.



Relevant Pages