avatar

目录
C语言实现socket通信

server.c

c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include<string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>

#define SERVPORT 3333//定义端口号
#define BACKLOG 10//请求队列中允许的最大请求数
#define MAXDATASIZE 5//数据长度

int main() {
struct sockaddr_in server_sockaddr,client_sockaddr;//声明服务器和客户端的socket存储结构
int sockfd,client_fd;//socket描述符
int sin_size,recvbytes;
char buf[MAXDATASIZE];//传输的数据

//1、建立socket链接
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) {//建立socket链接
perror("Socket");
exit(1);
}

printf("Socket success!,sockfd=%d\n",sockfd);

//2、填充socket信息
server_sockaddr.sin_family = AF_INET;//IPv4
server_sockaddr.sin_port = htons(SERVPORT);//端口
server_sockaddr.sin_addr.s_addr = INADDR_ANY;//本主机的任意IP都可以使用
bzero(&(server_sockaddr.sin_zero),8);//填充0

//3、bind函数绑定socket
if((bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))) == -1) {//bind函数绑定
perror("bind");
exit(-1);
}

printf("bind success!\n");

//4、监听
if(listen(sockfd,BACKLOG) == -1) {//监听,BACKLOG:最大监听数
perror("listen");
exit(1);
}

printf("listening ... \n");


while(1){//一直接收客户端请求

//5、等待客户端链接
if((client_fd = accept(sockfd,(struct sockaddr *) &client_sockaddr,&sin_size)) == -1) {//等待客户端链接
perror("accept");
exit(1);
}

printf("accept success!\n");

//6、接收客户端的请求
if((recvbytes = recv(client_fd,buf,MAXDATASIZE,0)) == -1) {//接收客户端的请求
perror("recv");
exit(1);
}
printf("received a connection : %s\n",buf);
}

//7、关闭
close(sockfd);
}

client.c

c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <arpa/inet.h>

#define DEST_PORT 3333
#define DEST_IP "127.0.0.1"/*目标地址IP,这里设为本机*/
#define MAXDATASIZE 100

int main(){
int sockfd,sendbytes;
struct sockaddr_in serv_addr;

//1、建立socket链接
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1) {//创建socket
perror("socket");
exit(1);
}
printf("Socket success!,sockfd=%d\n",sockfd);

//2、填充socket信息
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(DEST_PORT);
serv_addr.sin_addr.s_addr = inet_addr(DEST_IP);
bzero(&(serv_addr.sin_zero),8);



//3、连接服务端
if((connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))) == -1) {//发起对服务器的链接
perror("connect");
exit(1);
}

//4、发送消息
if((sendbytes = send(sockfd,"hello",5,0)) == -1) {//发送消息给服务器端
perror("send");
exit(1);
}

//5、关闭
close(sockfd);

}
文章作者: Machine
文章链接: https://machine4869.gitee.io/2018/09/29/15382179403318/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论