谁能写一段最简单的socket服务器端和客户端程序
1个回答
展开全部
//=======================================UDPServer.c======
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERV_PORT 15811
#define MAXLINE 100
void dg_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)
{
int n;
socklen_t len;
char mesg[MAXLINE];
for(;;)
{
len = clilen;
memset(mesg,0,sizeof(mesg));
n=recvfrom(sockfd,mesg,MAXLINE,0,pcliaddr,&len);
printf("Recv:%s\n",mesg);
sendto(sockfd,mesg,n,0,pcliaddr,len);
}
}
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr,cliaddr;
sockfd=socket(AF_INET, SOCK_DGRAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
dg_echo(sockfd, (struct sockaddr *)&cliaddr,sizeof(cliaddr));
}
//==================================UDPClient.c===
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#define SERV_PORT 15811
#define MAXLINE 100
int main(int argc, char **argv)
{
int sockfd,so_broadcast;
struct sockaddr_in servaddr;
if( argc!=2 )
perror("usage:udpclient<IPaddress>");
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
char sendline[MAXLINE];
char recvline[MAXLINE];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
//设置广播属性
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &so_broadcast, sizeof(so_broadcast)))
{
perror("setsockopt");
return ;
}
if (sockfd == -1)
{
perror("socket");
return ;
}
while(fgets(sendline, MAXLINE,stdin)!=NULL)
{
//指定发送的IP(可以如192.168.18.255--多播),以下两方法皆可
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
//servaddr.sin_addr.s_addr = inet_addr(argv[1]);
sendto(sockfd,sendline,strlen(sendline),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
memset(recvline,0,sizeof(recvline));
int n=recvfrom(sockfd,recvline,MAXLINE,0,NULL,NULL);
if(n>0)
fputs(recvline,stdout);
}
exit(0);
}
1.这是个linux c udp server和client的例子。
2.先执行server,再启动客户端,客户端启动时有一个参数,填服务端IP
3.实现了:启动客户端后,在终端输入一行数据,按回车发送给服务端,服务端接收到这个字符串后,输出,并将该字符串再次发送给客户端,客户端接收到服务端数据后输出。
4.你可以将这个程序修改成你想要的样子。
如果对你有帮助,给分哦,谢谢!
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERV_PORT 15811
#define MAXLINE 100
void dg_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)
{
int n;
socklen_t len;
char mesg[MAXLINE];
for(;;)
{
len = clilen;
memset(mesg,0,sizeof(mesg));
n=recvfrom(sockfd,mesg,MAXLINE,0,pcliaddr,&len);
printf("Recv:%s\n",mesg);
sendto(sockfd,mesg,n,0,pcliaddr,len);
}
}
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr,cliaddr;
sockfd=socket(AF_INET, SOCK_DGRAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
dg_echo(sockfd, (struct sockaddr *)&cliaddr,sizeof(cliaddr));
}
//==================================UDPClient.c===
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#define SERV_PORT 15811
#define MAXLINE 100
int main(int argc, char **argv)
{
int sockfd,so_broadcast;
struct sockaddr_in servaddr;
if( argc!=2 )
perror("usage:udpclient<IPaddress>");
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
char sendline[MAXLINE];
char recvline[MAXLINE];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
//设置广播属性
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &so_broadcast, sizeof(so_broadcast)))
{
perror("setsockopt");
return ;
}
if (sockfd == -1)
{
perror("socket");
return ;
}
while(fgets(sendline, MAXLINE,stdin)!=NULL)
{
//指定发送的IP(可以如192.168.18.255--多播),以下两方法皆可
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
//servaddr.sin_addr.s_addr = inet_addr(argv[1]);
sendto(sockfd,sendline,strlen(sendline),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
memset(recvline,0,sizeof(recvline));
int n=recvfrom(sockfd,recvline,MAXLINE,0,NULL,NULL);
if(n>0)
fputs(recvline,stdout);
}
exit(0);
}
1.这是个linux c udp server和client的例子。
2.先执行server,再启动客户端,客户端启动时有一个参数,填服务端IP
3.实现了:启动客户端后,在终端输入一行数据,按回车发送给服务端,服务端接收到这个字符串后,输出,并将该字符串再次发送给客户端,客户端接收到服务端数据后输出。
4.你可以将这个程序修改成你想要的样子。
如果对你有帮助,给分哦,谢谢!
51IDC
2024-12-01 广告
2024-12-01 广告
作为上海锐速网络科技有限公司的一员,我们专注于构建高效、稳定的服务器后台系统。我们运用先进的技术架构和严格的开发流程,确保服务器后台能够应对各种业务挑战,提供稳定可靠的数据处理能力和服务支持。同时,我们不断优化系统性能,提高安全性和可维护性...
点击进入详情页
本回答由51IDC提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询