C语言编写基于TCP和UDP协议的Socket通信程序示例
Tcp多线程服务器和客户端程序
服务器程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#definePORT8082
#defineBUFSIZE512
charbuf[BUFSIZE+1];
void*fun(void*x)
{
//printf("enterthread!\r\n");
intnew_fd=*((int*)x);
while(1)
{
intz=read(new_fd,buf,BUFSIZE);//第6步读取套接字
if(z==0){printf("clientclose!");break;};
buf[z]='\0';
printf("%s\r\n",buf);//打印
};
}
intnewfd[512];
intinewfd=0;
intmain()
{
//第1步创建套接字
intsockfd=socket(AF_INET,SOCK_STREAM,0);
//第2步设置地址结构体
structsockaddr_insvraddr;
svraddr.sin_family=AF_INET;//使用internet协议
svraddr.sin_port=htons(PORT);
inet_aton("0.0.0.0",&svraddr.sin_addr);
//第3步绑定
intret=bind(sockfd,(structsockaddr*)&svraddr,sizeof(svraddr));
if(ret<0){printf("errorbind!\r\n");exit(-1);};
//第4步监听
listen(sockfd,128);
while(1)
{
newfd[inewfd++]=accept(sockfd,NULL,NULL);//第5步接收
pthread_tntid;
pthread_create(&ntid,NULL,fun,(void*)&(newfd[inewfd-1]));
}
}
注意:
gccserver.c-oserver-lpthread
客户端程序cli.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#definePORT8082
#defineBUFSIZE512
charbuf[BUFSIZE+1];
intmain()
{
//第1步创建一个体套接字
intsockfd=socket(AF_INET,SOCK_STREAM,0);
//第2步设置addr结构体
structsockaddr_insvraddr;
svraddr.sin_family=AF_INET;//使用internet协议
svraddr.sin_port=htons(PORT);
inet_aton("127.0.0.1",&svraddr.sin_addr);
//第3步连接服务器
connect(sockfd,(structsockaddr*)&svraddr,sizeof(svraddr));
while(1)
{
scanf("%s",buf);
write(sockfd,buf,strlen(buf));//第4步向套接字中写入字符串
}
}
Udp的服务器程序和客户端程序
服务器程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#definePORT8082
#defineBUFSIZE512
charbuf[BUFSIZE+1];
intmain()
{
//第1步创建套接字
intsockfd=socket(AF_INET,SOCK_DGRAM,0);
//第2步设置地址结构体
structsockaddr_insvraddr;
svraddr.sin_family=AF_INET;//使用internet协议
svraddr.sin_port=htons(PORT);
inet_aton("0.0.0.0",&svraddr.sin_addr);
//第3步绑定
intret=bind(sockfd,(structsockaddr*)&svraddr,sizeof(svraddr));
if(ret<0){printf("cannotbind!\r\n");exit(-1);};
while(1)
{
structsockaddr_incli;
intlen=sizeof(cli);
intz=recvfrom(sockfd,buf,BUFSIZE,0,(structsockaddr*)&cli,&len);//第6步读取套接字
buf[z]='\0';
printf("%s\r\n",buf);//打印
}
}
客户端程序cli.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#definePORT8082
#defineBUFSIZE512
charbuf[BUFSIZE+1];
intmain()
{
//第1步创建一个体套接字
intsockfd=socket(AF_INET,SOCK_DGRAM,0);
//第2步设置addr结构体
structsockaddr_insvraddr;
svraddr.sin_family=AF_INET;//使用internet协议
svraddr.sin_port=htons(PORT);
inet_aton("127.0.0.1",&svraddr.sin_addr);
//第3步连接服务器
//connect(sockfd,(structsockaddr*)&svraddr,sizeof(svraddr));
while(1)
{
scanf("%s",buf);
sendto(sockfd,buf,strlen(buf),0,(structsockaddr*)&svraddr,sizeof(svraddr));//第4步向套接字中写入字符串
}
}
热门推荐
10 儿子立冬祝福语简短独特
11 对当兵的祝福语简短
12 侄儿高考试祝福语简短
13 伴郎红包祝福语朋友简短
14 媳妇生日简短祝福语朋友
15 公司年会祝福语简短最好
16 元旦感恩祝福语简短大全
17 红包祝福语简短10字
18 周六早晨祝福语简短