服务器端代码
// main.c
// UDPService
//
// Created by Andrew on 14-10-23.
// Copyright (c) 2014年 student. All rights reserved.
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char * argv[])
{
//创建 UDP socket
//参数一:固定写AF_INET
//参数二:SOCK_DGARM表示UDP
//
int fd=socket(AF_INET, SOCK_DGRAM, 0);
//生成一个地址
struct sockaddr_in sin;
bzero(&sin, sizeof(sin));//把结构体变量清零
sin.sin_family=AF_INET;//固定写法
sin.sin_addr.s_addr=htonl(INADDR_ANY);//表示可以从本机的任何网卡上的任何地址接受信息
sin.sin_port=htons(56780);
//绑定地址
bind(fd, (struct sockaddr*)&sin, sizeof(sin));
//发送方的地址
struct sockaddr_in client_sin;
bzero(&client_sin, sizeof(client_sin));
socklen_t client_addr_len=sizeof(client_sin);
//接受信息
char message[256];
while (1)
{
//接收信息,并返回收到的信息的长度
//参数一:socket描述符
//参数二:存储接收到得信息的buffer
//参数三:buffer的长度
//参数四:一些选项,0表示默认选项
//参数五:本函数返回后将变为发送方的地址
//参数六:地址的长度,调本函数之前必须想将其赋值为sockaddr_in这个结构体的字节数
//返回值:收到的信息长度
size_t message_len=recvfrom(fd, message, sizeof(message)-1, 0, (struct sockaddr*)&client_sin, &client_addr_len);
message[message_len]='\0';
if(!strcmp(message,"000111"))
{
strcpy(message, "server has stop!Andrew");
sendto(fd, message, sizeof(message), 0, (struct sockaddr*)&client_sin, sizeof(client_sin));
break;
}
printf("Receive message:%s\n",message);
//printf("Receive message:%s\n",message);
strcpy(message, "server has received your message!Andrew");
//发送信息给客户端
//参数一:socket描述符
//参数二:存储要发送信息的buffer
//参数三:buffer的长度
//参数四:一些选项,0表示默认选项
//参数五:本函数返回后将变为发送方的地址
//参数六:地址的长度,调本函数之前必须想将其赋值为sockaddr_in这个结构体的字节数
//返回值:收到的信息长度
sendto(fd, message, sizeof(message), 0, (struct sockaddr*)&client_sin, sizeof(client_sin));
}
close(fd);
return 0;
}
//客户端代码
//
// main.c
// UDPClient
//
// Created by Andrew on 14-10-23.
// Copyright (c) 2014年 student. All rights reserved.
//
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char * argv[])
{
//创建一个socket
int fd=socket(AF_INET, SOCK_DGRAM, 0);
//生成服务器端地址
struct sockaddr_in Service_Sin;
bzero(&Service_Sin, sizeof(Service_Sin));
Service_Sin.sin_family=AF_INET;
Service_Sin.sin_addr.s_addr=inet_addr("10.0.178.209");
Service_Sin.sin_port=htons(5678);
//发送信息
char message[256];
//strcpy(message,"丽娜!Andrew");
while (1)
{
scanf("%s",message);
//printf("old:%s\n",message);
sendto(fd, message, sizeof(message), 0, (struct sockaddr*)&Service_Sin, sizeof(Service_Sin));
size_t len=recvfrom(fd, message, sizeof(message)-1, 0, NULL,NULL);
message[len]='\0';
printf("%s\n",message);
}
close(fd);
return 0;
}