本文参考自 21天学通linux c编程
socket编程可参考:
socket编程:
http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
http://www.kuqin.com/networkprog/20080512/8361.html
网络字节顺序以及转换函数
http://blog.sina.com.cn/s/blog_4ad7c25401019qqb.html
1,设置套接字
2,读取套接字状态
3,UDP客户端实现
4,UDP服务器实现
1,设置套接字
2,读取套接字状态
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
int main()
{
int s;
int val=1,len,i ;
len= sizeof(int);
if((s = socket(AF_INET,SOCK_STREAM,0))<0) //creat
{
perror("connect");
exit(1);
}
else
{
printf("a socket was created.\n");
printf("socket number:%d\n",s);
}
i=setsockopt(s,SOL_SOCKET,SO_TYPE,&val,len); //set
if("i==0")
{
printf("set socket ok.\n.");
}
else
{
printf("set socket error.\n.");
}
getsockopt(100,SOL_SOCKET,SO_TYPE,&val,&len); //get
perror("socket");
}
3,UDP客户端实现
有些编译器报错则在使用addr时(struct sockaddr *)&addr
#include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/socket.h> #define REMOTEPORT 4567 #define REMOTEIP "127.0.0.1" int main(int argc,char *argv[]) { int s,len; struct sockaddr_in addr; int addr_len; char msg[256]; int i=0; if (( s= socket(AF_INET, SOCK_DGRAM, 0) )<0) //建立一个socket { perror("error"); exit(1); } else { printf("socket created .\n"); printf("socked id: %d \n",s); printf("remote ip: %s \n",REMOTEIP); printf("remote port: %d \n",REMOTEPORT); } len=sizeof(struct sockaddr_in); //长度 bzero(&addr,sizeof(addr)); addr.sin_family=AF_INET; //添加端口与地址信息 addr.sin_port=htons(REMOTEPORT); addr.sin_addr.s_addr=inet_addr(REMOTEIP); while (1) { bzero(msg,sizeof(msg)); len = read(STDIN_FILENO,msg,sizeof(msg)); sendto(s,msg,len,0,&addr,addr_len); //发送信息 printf("\nInput message: %s \n",msg); len= recvfrom (s,msg,sizeof(msg),0,&addr,&addr_len);/*这是接收到的信息。*/ printf("%d :",i); i++; printf("Received message: %s \n",msg); /*这是服务器返回的信息。*/ } }
4,UDP服务器实现
有些编译器报错则在使用addr时(struct sockaddr *)&addr
#include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #define LOCALPORT 4567 int main(int argc,char *argv[]) { int mysock,len; struct sockaddr_in addr; int i=0; char msg[256]; int addr_len; if (( mysock= socket(AF_INET, SOCK_DGRAM, 0) )<0) { perror("error"); exit(1); } else { printf("socket created .\n"); printf("socked id: %d \n",mysock); } addr_len=sizeof(struct sockaddr_in); bzero(&addr,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(LOCALPORT); addr.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(mysock,&addr,sizeof(addr))<0) { perror("connect"); exit(1); } else { printf("bind ok.\n"); printf("local port :%d \n",LOCALPORT); } while (1) { bzero(msg,sizeof(msg)); len= recvfrom (mysock,msg,sizeof(msg),0,&addr,&addr_len);/*接收到信息*/ printf("%d :",i); i++; printf("message from : %s \n",inet_ntoa(addr.sin_addr)); printf(" message length : %d \n",len); printf(" message : %s \n\n",msg); sendto(mysock,msg,len,0,&addr,addr_len); /*以上将字符串返回给客户端*/ } }