TCP服务器
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#define PORT 50000
int main()
{
int socket_id = socket(AF_INET,SOCK_STREAM,0);
if(0 > socket_id)
{
perror("socket");
return -1;
}
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
int ret = bind(socket_id,(struct sockaddr *)&server_addr,sizeof(server_addr));
if(0 != ret)
{
perror("bind");
close(socket_id);
return -1;
}
ret = listen(socket_id,3);
if(0 != ret)
{
perror("listen");
return -1;
}
printf("port:%d start server listen\n",PORT);
while(1)
{
struct sockaddr_in client_addr;
char client_ip[INET_ADDRSTRLEN] = "";
socklen_t client_addr_len = sizeof(client_addr);
int conn = accept(socket_id,(struct sockaddr *)&client_addr,&client_addr_len);
if(0 > conn)
{
perror("accept");
continue;
}
inet_ntop(AF_INET,&client_addr.sin_addr,client_ip,INET_ADDRSTRLEN);
printf("client %s:%d connet\n",client_ip,ntohs(client_addr.sin_port));
while(1)
{
char buf[256] = "";
int ret = recv(conn,buf,sizeof(buf),0);
if(ret > 0)
{
if(0 == strcmp(buf,"exit"))
{
break;
}
printf("recv:%s\n",buf);
send(conn,buf,ret,0);
}
else if(0 == ret)
{
printf("client %s:%d disconnet\n",client_ip,ntohs(client_addr.sin_port));
break;
}
}
}
close(socket_id);
return 0;
}
TCP客户端
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#define SERVER_IP "192.168.1.9"
#define SERVER_PORT 50000
#define PORT 55000
int main()
{
int socket_id = socket(AF_INET,SOCK_STREAM,0);
if(0 > socket_id)
{
perror("socket");
return -1;
}
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
int ret = connect(socket_id,(struct sockaddr *)&server_addr,sizeof(server_addr));
if(-1 == ret)
{
perror("connect");
close(socket_id);
return -1;
}
printf("connect server\n");
while(1)
{
send(socket_id,"===",3,0);
sleep(3);
}
close(socket_id);
return 0;
}
UDP接受
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#define RECV_IP "192.168.1.9"
#define RECV_PORT 50001
int main(void)
{
int sockfd = 0;
int ret = 0;
struct sockaddr_in recvaddr;
struct sockaddr_in sendaddr;
socklen_t addrlen = sizeof(sendaddr);
char tmpbuff[4096] = {0};
ssize_t nsize = 0;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd)
{
perror("fail to socket");
return -1;
}
recvaddr.sin_family = AF_INET;
recvaddr.sin_port = htons(RECV_PORT);
recvaddr.sin_addr.s_addr = inet_addr(RECV_IP);
ret = bind(sockfd, (struct sockaddr *)&recvaddr, sizeof(recvaddr));
if (-1 == ret)
{
perror("fail to bind");
return -1;
}
while (1)
{
nsize = recvfrom(sockfd, tmpbuff, sizeof(tmpbuff), 0, (struct sockaddr *)&sendaddr, &addrlen);
if (-1 == nsize)
{
perror("fail to recvfrom");
return -1;
}
printf("%s:%d->%s\n", inet_ntoa(sendaddr.sin_addr), ntohs(sendaddr.sin_port), tmpbuff);
}
close(sockfd);
return 0;
}
UDP发送
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#define RECV_IP "192.168.1.9"
#define RECV_PORT 50001
int main(void)
{
int sockfd = 0;
char tmpbuff[32] = {"hello world"};
struct sockaddr_in recvaddr;
ssize_t ret = 0;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd)
{
perror("fail to socket");
return -1;
}
recvaddr.sin_family = AF_INET;
recvaddr.sin_port = htons(RECV_PORT);
recvaddr.sin_addr.s_addr = inet_addr(RECV_IP);
ret = sendto(sockfd, tmpbuff, strlen(tmpbuff)+1, 0, (struct sockaddr *)&recvaddr, sizeof(recvaddr));
if (-1 == ret)
{
perror("fail to sendto");
return -1;
}
close(sockfd);
return 0;
}