C/S模式简单socket通信
2024-09-03 14:14:42
TCP连接方式
sever.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h> #define PORT 8000
#define QUEN 20
#define MAXLINE 2048
int main()
{
int sock_fd,connect_fd;
char BUFFER[2048];
int n;
struct sockaddr_in severaddr;
if((sock_fd = socket(AF_INET, SOCK_STREAM, 0))==-1)
{
printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
memset(&severaddr,0,sizeof(severaddr));
severaddr.sin_family = AF_INET;
severaddr.sin_port = htons(PORT);
severaddr.sin_addr.s_addr = htonl(INADDR_ANY); if((bind(sock_fd,(struct sockaddr*)&severaddr, sizeof(severaddr)))==-1)
{
printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
if(listen(sock_fd,QUEN)==-1)
{
printf("listen error");
}
printf("=============wating for client=========================\n"); connect_fd = accept(sock_fd,(struct sockaddr*)NULL, NULL);
while((n = recv(connect_fd,BUFFER,MAXLINE,0))>0)
{
if(!fork()) //son
{
if((send(connect_fd,BUFFER,sizeof(BUFFER),0)) == -1)
perror("send error");
BUFFER[n]='\0';
printf("receive message from client: %s\n",BUFFER);
close(connect_fd);
exit(0);
}
if((strcmp(BUFFER,"exit"))==0)
{
printf("exit link");
break;
}
} close(connect_fd);
close(sock_fd); }
client.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h> #define MAXLINE 2048
#define PORT 8000
int main()
{
int sock_fd,rec_len;
char recvline[2048],sendline[2048];
char buf[MAXLINE];
struct sockaddr_in clientaddr; if((sock_fd = socket(AF_INET, SOCK_STREAM,0))==-1)
{
printf("socket link error\n");
}
memset(&clientaddr,0,sizeof(clientaddr));
clientaddr.sin_family = AF_INET;
clientaddr.sin_port =htons( PORT);
clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); if((connect(sock_fd,(struct sockaddr*)&clientaddr,sizeof(clientaddr)))==-1)
{
printf("connect errot\n");
exit(0);
}
while(fgets(sendline,2048,stdin) != NULL)
{ printf("send message to sever:%s\n",sendline); send(sock_fd,sendline, sizeof(sendline),0); rec_len = recv(sock_fd,buf,MAXLINE,0);
if(sendline=="exit")
{
printf("exit link\n");
break;
}
buf[rec_len] = '\0';
printf("receive:%s\n",buf); } close(sock_fd); exit(0);
}
UDP方式连接
sever.c
#include <stdio.h> #include <sys/socket.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <stdlib.h> #define FILE_NAME_SIZE 512 #define PORT 8000 #define BUFFERSIZE 1024 int main() { int sock_id, bind_id; struct sockaddr_in severaddr; if((sock_id = socket(AF_INET,SOCK_DGRAM,)) == -) { printf("socket error"); exit(); } memset(&severaddr,, sizeof(severaddr)); severaddr.sin_family = AF_INET; severaddr.sin_port = htons(PORT); severaddr.sin_addr.s_addr = htonl(INADDR_ANY); if((bind_id = bind(sock_id, (struct sockaddr*)&severaddr, sizeof(severaddr))) == -) { printf("bind error"); exit(); } while() { struct sockaddr_in clientaddr; socklen_t clientaddr_length = sizeof(clientaddr); char recvbuf[BUFFERSIZE]; bzero(recvbuf, BUFFERSIZE); if((recvfrom(sock_id,recvbuf,BUFFERSIZE,,(struct sockaddr*)&clientaddr,&clientaddr_length))==-) { printf("recv error"); exit(); } char file_name[FILE_NAME_SIZE]; bzero(file_name, FILE_NAME_SIZE); strncpy(file_name,recvbuf,strlen(recvbuf)>FILE_NAME_SIZE?FILE_NAME_SIZE:strlen(recvbuf));
printf("%s\n",file_name);
}
close(sock_id);
return ;
}
client.c
#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <errno.h> #define PORT 8000 #define BUFFER_SIZE 1024 int main() { int sock_id; struct sockaddr_in clientaddr; if((sock_id = socket(AF_INET, SOCK_DGRAM, )) == -) { perror("sock error"); exit(); } memset(&clientaddr, , sizeof(clientaddr)); clientaddr.sin_family = AF_INET; clientaddr.sin_port = htons(PORT); clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); char file_name[BUFFER_SIZE]; bzero(file_name, BUFFER_SIZE); scanf("%s\n",file_name); if(sendto(sock_id, file_name, BUFFER_SIZE, , (struct sockaddr *)&clientaddr, sizeof(clientaddr)) <) { perror("send error"); exit(); } close(sock_id); return ; }
最新文章
- Mac系统下配置JDK环境变量
- 关于公司VPN专线接入的一个案例
- Java-类和对象基础练习
- 如何设计点击点击一个div,其他div做出对应反应,以及获取一个节点下的子节点
- 【原创】如何在Android中为TextView动态设置drawableLeft等
- CString 转 char*; wstring 转 string
- 初学者学习javascript语言应注意的那几点
- js分割文件快速上传
- 导入sql时报日期类型错误
- oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段
- Tair LDB基于Prefixkey中期范围内查找性能优化项目总结
- html表单 2017-03-10PM
- markdown基础
- java 信号量Semaphore
- 关于getch()函数
- [随笔][Java][修改pom仓库库为阿里云]
- c++常用小算法
- 人工智能第三课:数据科学中的Python
- saltstack returners
- 用js控制 给一个input赋值之后,change事件不能捕获到,解决办法