TCP
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
h表示host,n表示network,l表示32位整数,s表示16位整数
IP地址zhuan'huan函数:
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
sockaddr数据结构:
tcpserver.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/types.h>
#define MAXLINE 80
#define PORT 8000
int main()
{
struct sockaddr_in serveraddr,clientaddr;
int i,n;
socklen_t clientaddr_len;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int listenfd,connfd;
listenfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(PORT);
bind(listenfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
listen(listenfd,20);
printf("Accepting connections...\n");
while(1)
{
clientaddr_len = sizeof(clientaddr);
connfd = accept(listenfd,(struct sockaddr*)&clientaddr,&clientaddr_len);
n = read(connfd,buf,MAXLINE);
printf("received from %s PORT %d\n",
inet_ntop(AF_INET,&clientaddr.sin_addr,str,sizeof(str)),
ntohs(clientaddr.sin_port));
for(i=0;i<n;i++)
buf[i] = toupper[buf[i]];
write(connfd,buf,n);
close(connfd);
}
return 0;
}
tcpclient.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#define MAXLINE 80
#define PORT 8000
int main(int argc,char* argv[])
{
struct sockaddr_in serveraddr;
char buf[MAXLINE];
char* str;
int n;
int sockfd;
if(argc != 2)
exit(1);
str = argv[1];
sockfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
inet_pton(AF_INET,"127.0.0.1",&serveraddr.sin_addr);
serveraddr.sin_port = htons(PORT);
connect(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
write(sockfd,str,strlen(str));
n = read(sockfd,buf,MAXLINE);
write(STDOUT_FILENO,buf,n);
close(sockfd);
return 0;
}
UDP
udpserver.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#define MAXLINE 80
#define PORT 8000
int main()
{
struct sockaddr_in serveraddr,clientaddr;
char buf[MAXLINE];
char str[INET_ADDRSTARLEN];
socklen_t clientaddr_len;
int sockfd;
int i,n;
sockfd = socket(AF_INET,SOCK_DGRAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(PORT);
bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
while(1)
{
n =
recvfrom(sockfd,buf,MAXLINE,0,(struct sockaddr*)&clientaddr,&clientaddr_len);
printf("received from %d PORT %d\n",
inet_ntop(AF_INET,&clientaddr.sin_addr,str,sizeof(size)),
ntohs(clientaddr.sin_port));
for(i=0;i<n;i++)
buf[i] = toupper[buf[i]];
sendto(sockfd,buf,n,0,(struct sockaddr*)&clientaddr,sizeof(clientaddr));
}
close(sockfd);
return 0;
}
udpclient.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#define MAXLINE 80
#define PORT 8000
int main()
{
struct sockaddr_in serveraddr;
int sockfd,n;
char buf[MAXLINE];
sockfd = socket(AF_INET,SOCK_DGRAM,0);
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
inet_pton(AF_INET,"127.0.0.1",&serveraddr.sin_addr);
serveraddr.sin_port = htons(PORT);
while(fgets(buf,MAXLINE,stdin)!=NULL)
{
n = sendto(sockfd,buf,
strlen(buf),0,(struct sockaddr*)&serveraddr,sizeof(serveraddr))
n = recvfrom(sockfd,buf,MAXLINE,0,NULL,0);
write(STDOUT_FILENO,buf,n);
}
return 0;
}