发送方:
/*
* File: main.c
* Author: tianshuai
*
* Created on 2011年11月29日, 下午10:34
*
* 主要实现:发送20个文本消息,然后再发送一个终止消息
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
int port=6789;
int main(int argc, char** argv) {
int socket_descriptor; //套接口描述字
int iter=0;
char buf[80];
struct sockaddr_in address;//处理网络通信的地址
bzero(&address,sizeof(address));
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("127.0.0.1");//这里不一样
address.sin_port=htons(port);
//创建一个 UDP socket
socket_descriptor=socket(AF_INET,SOCK_DGRAM,0);//IPV4 SOCK_DGRAM 数据报套接字(UDP协议)
for(iter=0;iter<=20;iter++)
{
/*
* sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"
* 将格式化后到 字符串存放到s当中
*/
sprintf(buf,"data packet with ID %d\n",iter);
/*int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags,const struct sockaddr FAR* to, int tolen);
* s:一个标识套接口的描述字。
* buf:包含待发送数据的缓冲区。
* len:buf缓冲区中数据的长度。
* flags:调用方式标志位。
* to:(可选)指针,指向目的套接口的地址。
* tolen:to所指地址的长度。
*/
sendto(socket_descriptor,buf,sizeof(buf),0,(struct sockaddr *)&address,sizeof(address));
}
sprintf(buf,"stop\n");
sendto(socket_descriptor,buf,sizeof(buf),0,(struct sockaddr *)&address,sizeof(address));//发送stop 命令
close(socket_descriptor);
printf("Messages Sent,terminating\n");
exit(0);
return (EXIT_SUCCESS);
}
接受方:
/*
* File: main.c
* Author: tianshuai
*
* Created on 2011年11月29日, 下午10:34
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
int port=6789;
int main(int argc, char** argv) {
int sin_len;
char message[256];
int socket_descriptor;
struct sockaddr_in sin;
printf("Waiting for data form sender \n");
bzero(&sin,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=htonl(INADDR_ANY);
sin.sin_port=htons(port);
sin_len=sizeof(sin);
socket_descriptor=socket(AF_INET,SOCK_DGRAM,0);
bind(socket_descriptor,(struct sockaddr *)&sin,sizeof(sin));
while(1)
{
recvfrom(socket_descriptor,message,sizeof(message),0,(struct sockaddr *)&sin,&sin_len);
printf("Response from server:%s\n",message);
if(strncmp(message,"stop",4) == 0)//接受到的消息为 “stop”
{
printf("Sender has told me to end the connection\n");
break;
}
}
close(socket_descriptor);
exit(0);
return (EXIT_SUCCESS);
}
分享到:
相关推荐
基于C语言、linux系统的socket编程,包括基本的套接口概念,以及高级编程,有多并发程序,TCP、UDP实例。
linux下socket编程,适合初学者。 包括 广播 组播和udp 的测试代码, 全部经本人测试通过。 标准C编写,如在windows下,只要稍作修改,即可使用。
udp -socket编程,简单的了解linux下的socket编程流程
Linux下基于UDP的socket编程,适用多客户端之间,服务器与客户端之间的通信。在阿里云服务器上已通过测试。notepad++可打开
socket编程 linux socket 阻塞 tcp udp ip
socket网络编程在linux下的实现,支持tcp/udp两种协议
#include<sys/socket.h> #include #define MYPORT 3490 //设定端口为3490 #define BACKLOG 10 main() { int sockfd,new_fd; struct sockaddr_in my_addr; //服务器网络地址结构体 struct sockaddr_in their_addr;...
服务器: 创建 Socket 服务器: 使用 bind() 将套接字与特定的 IP 地址和端口绑定 客户端: 创建 Socket 连接阶段(UDP 不需要建立连接) 服务器: 使用 listen() 进入监听状态 服务器: 使用 accpet() 接收客服端的请求,...
linux网络编程 pdf # Linux网络编程基础 Linux网络编程是指在Linux操作系统上开发网络应用程序的过程。它主要涉及到TCP/UDP协议以及select/poll/epoll等多路复用技术。 TCP/UDP协议是网络通信的基础,其中TCP协议...
其包含客户端和服务器端代码,实现了linux下的socket编程,是UDP方面很好的例子
Linux Socket Bind() 成功解决socket编程中bind端口绑定的Error:Address already in use 错误。
主要介绍了Linux UDP socket 设置为的非阻塞模式与阻塞模式区别的相关资料,需要的朋友可以参考下
Linux下基于UDP的socket编程,适用多客户端之间,服务器与客户端之间的通信。客户端和服务端代码分开了。notepad++可打开
要学Internet上的TCP/IP网络编程,必须理解socket接口。 socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解socket了。网络的socket数据传输是一种特殊的I/O,...
linux网络编程实例,讲解了一些udp tcp的socket编程,有select的例子
参考我看到的那篇文章(要谢谢作者,写的还是很通俗易懂的,地址见下文),本代码可以作为socket编程的一个小入门。 这是一个参考以下文章实现的简单的echo实例: ...文章中用c++实现,我用c写了一下,没什么区别。...
linux epoll socket UDP通信的实现! 看清楚不是tcp哟.zip
Linux网络编程示例程序,包含TCP、UDP的server和client
多客户端需要从服务器下载文件,本设计基于socket通信完成的文件分发。
自学Linux网络编程关于socket的编写,包括 server.c 和 client.c 的编写;很详细的介绍了网络套接字socket的C/S模型TCP协议的服务器端和客户端的程序函数以及编写过程;重点介绍多路I/O转接服务器的实现,包括select...