C/S模型的网络编程
1、TCP
客户端
#include<stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#define BUF_SIZE 100
int main()
{
//socket
int iClient = socket(AF_INET,SOCK_STREAM,0);
if(-1 == iClient)
{
return -1;
}
printf("socket ok,iClient=%d\r\n",iClient);
//connect
struct sockaddr_in stServer;
memset(&stServer,0,sizeof(struct sockaddr_in));
stServer.sin_family = AF_INET;
stServer.sin_port = htons(8888);
stServer.sin_addr.s_addr = inet_addr("127.0.0.1");
int ret = connect(iClient,(struct sockaddr *)&stServer,sizeof(struct sockaddr));
if(-1 == ret)
{
printf("connect error\r\n");
return -1;
}
printf("connect ok\r\n");
//send
char buf[BUF_SIZE]={0};
gets(buf);
ret = send(iClient,buf,BUF_SIZE,0);
if(-1 == ret)
{
printf("send error\r\n");
}
printf("send ok\r\n");
//recv
memset(buf,0,BUF_SIZE);
ret = recv(iClient,buf,BUF_SIZE,0);
if(-1 == ret)
{
printf("recv error\r\n");
}
printf("recv: %d %s\r\n",ret,buf);
close(iClient);
}
服务端
#include<stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#define BUF_SIZE 100
int main()
{
//socket
int iServer = socket(AF_INET,SOCK_STREAM,0);
if(-1 == iServer)
{
return -1;
}
printf("socket ok\r\n");
//bind
struct sockaddr_in stServer;
memset(&stServer,0,sizeof(struct sockaddr_in));
stServer.sin_family = AF_INET;
stServer.sin_port = htons(8888);
stServer.sin_addr.s_addr = inet_addr("0.0.0.0");
int ret = bind(iServer,(struct sockaddr *)&stServer,sizeof(struct sockaddr));
if(-1 == ret)
{
return -1;
}
printf("bind ok\r\n");
//listen
ret = listen(iServer,5);
if(-1 == ret)
{
return -1;
}
printf("listen ok\r\n");
//accept
struct sockaddr_in stClient;
socklen_t len = sizeof(struct sockaddr_in);
char buf[BUF_SIZE];
while(1)
{
memset(buf,0,BUF_SIZE);
memset(&stClient,0,sizeof(struct sockaddr_in));
int iClient = accept(iServer,(struct sockaddr *)&stClient,&len);
if(-1 == iClient)
{
return -1;
}
printf("accept ok\r\n");
printf("port=%d \r\n",ntohs(stClient.sin_port));
printf("addr=%s\r\n",(char *)inet_ntoa(stClient.sin_addr.s_addr));
//recv
ret = recv(iClient,buf,BUF_SIZE,0);
if(ret <= 0)
{
close(iClient);
continue;
}
printf("recv %d:%s\r\n",ret,buf);
//send
ret = send(iClient,buf,BUF_SIZE,0);
if(ret <= 0)
{
continue;
}
printf("send:%d %s\r\n",ret,buf);
close(iClient);
}
return 0;
}
2、UDP
客户端
#include<stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#define BUF_SIZE 100
int main()
{
//socket
int iServer = socket(AF_INET,SOCK_DGRAM,0);
if(-1 == iServer)
{
return -1;
}
printf("create socket ok\r\n");
//bind
struct sockaddr_in stServer;
memset(&stServer,0,sizeof(struct sockaddr_in));
stServer.sin_family = AF_INET;
stServer.sin_port = htons(6666);
stServer.sin_addr.s_addr = inet_addr("127.0.0.1");
//sendto or recvfrom
char buf[BUF_SIZE];
socklen_t len = sizeof(struct sockaddr);
while(1)
{
//sendto
memset(buf,0,BUF_SIZE);
gets(buf);
if(sendto(iServer,buf,BUF_SIZE,0,(struct sockaddr *)&stServer,len)>0)
{
//recvfrom
memset(buf,0,BUF_SIZE);
recvfrom(iServer,buf,BUF_SIZE,0,(struct sockaddr *)&stServer,&len);
printf("recv from server:%s\r\n",buf);
}
}
}
服务端
#include<stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#define BUF_SIZE 100
int main()
{
//socket
int iServer = socket(AF_INET,SOCK_DGRAM,0);
if(-1 == iServer)
{
return -1;
}
printf("create socket ok\r\n");
//bind
struct sockaddr_in stServer;
memset(&stServer,0,sizeof(struct sockaddr_in));
stServer.sin_family = AF_INET;
stServer.sin_port = htons(6666);
stServer.sin_addr.s_addr = htonl(INADDR_ANY);
int ret = bind(iServer,(struct sockaddr *)&stServer,sizeof(struct sockaddr));
if(-1 == ret)
{
printf("bind error\r\n");
return -1;
}
printf("bind ok\r\n");
//sendto or recvfrom
struct sockaddr_in stClient;
char buf[BUF_SIZE];
socklen_t len = sizeof(struct sockaddr);
while(1)
{
//recvfrom
memset(buf,0,BUF_SIZE);
memset(&stClient,0,sizeof(struct sockaddr_in));
if(recvfrom(iServer,buf,BUF_SIZE,0,(struct sockaddr *)&stClient,&len)>0)
{
sendto(iServer,buf,BUF_SIZE,0,(struct sockaddr *)&stClient,len);
printf("send to client:%s\r\n",buf);
}
}
}
基本网络编程,仅供参考,不足之处多多指正。