UDP 编写
server.c
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netinet/in.h>
void Usage(char* prc)
{
printf("Usage: %s [local ip][local port]",prc);
}
int main(int argc,char* argv[])
{
if(argc!=3)
{
Usage(argv[0]);
return 1;
}
//sock
int sock=socket(AF_INET,SOCK_DGRAM,0);
if(sock<0)
{
perror("sock");
return 2;
}
struct sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port=htons(atoi(argv[2]));
local.sin_addr.s_addr=inet_addr(argv[1]);
//
if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)
{
perror("bind");
return 3;
}
char buf[1024];
struct sockaddr_in client_socket;
while(1)
{
socklen_t len=sizeof(client_socket);
size_t s=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client_socket,&len);
if(s>0)
{
buf[s]=0;
printf("[%s][%d]:%s\n",inet_ntoa(client_socket.sin_addr),ntohs(client_socket.sin_port),buf);
//write
ssize_t _s=sendto(sock,buf,strlen(buf),0,(struct sockaddr *)&client_socket,sizeof(client_socket));
if(_s<0)
{
perror("sendto");
}
}
}
return 0;
}
cllient.c
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<netinet/in.h>
void Usage(char* prc)
{
printf("Usage: %s [server ip][local port]",prc);
}
int main(int argc,char* argv[])
{
if(argc!=3)
{
Usage(argv[0]);
return 1;
}
//sock
int sock=socket(AF_INET,SOCK_DGRAM,0);
if(sock<0)
{
perror("sock");
return 2;
}
struct sockaddr_in server;
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[2]));
server.sin_addr.s_addr=inet_addr(argv[1]);
//无连接
char buf[1024];
while(1)
{
printf("Please Enter:");
fflush(stdout);
ssize_t s=read(0,buf,sizeof(buf));
if(s>0)
{
buf[s-1]=0;
ssize_t _s=sendto(sock,buf,strlen(buf),0,(struct sockaddr *)&server,sizeof(server));
if(_s<0)
{
perror("sendto");
}
ssize_t s=recvfrom(sock,buf,sizeof(buf)-1,0,0,0);
if(s>0)
{
buf[s]=0;
printf("server echo:%s\n",buf);
}
}
}
return 0;
}
TCP 编写
int main(int argc,char* argv[])
{
if(argc!=3)
{
printf("Usage:%s [service ip][service port]\n",argv[0]);
return 1;
}
int sock=socket(AF_INET,SOCK_STREAM,0);
//create ipv4 socket
struct sockaddr_in server_socket;
struct sockaddr_in client_socket;
bzero(&server_socket,sizeof(server_socket));
//fill addr port
server_socket.sin_family=AF_INET;
server_socket.sin_addr.s_addr=inet_addr(argv[1]);
server_socket.sin_port=htons(atoi(argv[2]));
if(bind(sock,(struct sockaddr*)&server_socket,sizeof(struct sockaddr_in))<0)
{
perror("bind");
close(sock);
return 1;
}
int new_sock=accept(sock,(struct sockaddr*)&client_socket,&len); //return fd
if(new_sock<0)
{
//perror("accept ");
continue;
}
while(1)
{
ssize_t s=read(new_sock,buf,sizeof(buf));
if(s>0)
{
buf[s]=0;
printf("Client #:%s\n",buf);
write(new_sock,buf,strlen(buf));
}else if(s==0)
{
printf("client quit!\n");
break;
}
else
{
perror("read");
}
}
close(new_sock);
}
return 0;
}