您的位置:首页 > 理论基础 > 计算机网络

一个很基础的tcp客户端和服务器代码。

2013-08-24 12:46 417 查看
01
#include <stdio.h>
02
#include <stdlib.h>
03
#include <string.h>
04
#include <sys/socket.h>
05
#include <netinet/in.h>
06
#include <arpa/inet.h>
07
 
08
//tcp客户端
09
int
main()
10
{
11
    
//1. 准备socket
12
    
int

sockfd=socket(PF_INET,SOCK_STREAM,0);
13
    
if
(sockfd==-1)
perror
(
""
),
exit
(-1);
14
    
//2. 准备地址
15
    
struct

sockaddr_in addr;
16
    
addr.sin_family = PF_INET;
17
    
addr.sin_port = htons(8888);       
18
    
inet_aton(
"127.0.0.1"
,&addr.sin_addr);
19
    
//3.连接
20
    
int

res = connect(sockfd,
21
        
(
struct

sockaddr*)&addr,
sizeof
(addr));
22
    
if
(res==-1)
perror
(
"连接失败"
),
exit
(-1);
23
    
printf
(
"连接成功\n"
);
24
    
//4.通信
25
    
send(sockfd,
"Hello!服务器"
, 12, 0);  

26
    
char

buf[100] = {};
27
    
recv(sockfd, buf,
sizeof
(buf), 0);
28
    
printf
(
"服务说:%s\n"
, buf);
29
    
//5.关闭
30
    
close(sockfd);
31
}

[2].[代码] tcp_server.c 

01
#include <stdio.h>
02
#include <stdlib.h>
03
#include <string.h>
04
#include <sys/socket.h>
05
#include <netinet/in.h>
06
#include <arpa/inet.h>
07
#include <time.h>
08
 
09
//tcp服务器端
10
int
main()
11
{
12
    
//1. 准备socket
13
    
int

sockfd=socket(PF_INET,SOCK_STREAM,0);
14
    
if
(sockfd==-1)
perror
(
""
),
exit
(-1);
15
    
//2. 准备地址
16
    
struct

sockaddr_in addr;
17
    
addr.sin_family = PF_INET;
18
    
addr.sin_port = htons(8888);       
19
    
inet_aton(
"192.168.182.53"
,&addr.sin_addr);
20
    
//3.绑定
21
    
int

res = bind(sockfd,
22
        
(
struct

sockaddr*)&addr,
sizeof
(addr));
23
    
if
(res==-1)
perror
(
"绑定失败"
),
exit
(-1);
24
    
printf
(
"绑定成功\n"
);
25
    
//4.监听
26
    
res = listen(sockfd, 100); 
27
    
if
(res==-1)
perror
(
"监听失败"
),
exit
(-1);
28
    
printf
(
"启动监听\n"
);
29
    
while
(1){
30
        
//5.等待客户端连接
31
        
struct

sockaddr_in fromaddr;
32
        
socklen_t len =
sizeof
(fromaddr);
33
        
int

fd=accept(sockfd,
34
            
(
struct

sockaddr*)&fromaddr, &len);
35
        
//6.和客户端通信
36
        
//6.1接收客户端数据
37
        
char

buf[100] = {};
38
        
if
(recv(fd, buf,
sizeof
(buf),0)<=0)
39
            
perror
(
"接收数据失败"
);
40
        
else
{
41
            
printf
(
"客户端%s说:%s\n"
,
42
                
inet_ntoa(fromaddr.sin_addr),buf);
43
        
}  

44
        
//6.2给客户端发数据
45
        
memset
(buf, 0,
sizeof
(buf));
46
        
time_t

cur;
47
        
time
(&cur);
48
        
struct

tm
* cur_tm =
localtime
(&cur);
49
        
sprintf
(buf,
"%4d-%02d-%02d %02d:%02d:%02d"
,
50
            
cur_tm->tm_year+1900,
51
            
cur_tm->tm_mon+1,
52
            
cur_tm->tm_mday,
53
            
cur_tm->tm_hour,
54
            
cur_tm->tm_min,
55
            
cur_tm->tm_sec);
56
        
send(fd, buf,
strlen
(buf),0);
57
        
//7.关闭socket
58
        
close(fd);
59
    
}
60
    
close(sockfd);
61
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐