一个很基础的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 | } |
相关文章推荐
- Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)
- Java基础知识强化之网络编程笔记07:TCP之服务器给客户端一个反馈案例
- TCP代理的python实现(包括客户端/服务器/TCP代理三部分代码)
- 简单的TCP 流式socket 服务器和客户端代码示例
- LINUXC--TCP的客户端/服务器代码
- 客户端C和服务器S之间建立了一个TCP连接,TCP最大段长度为1KB,客户端C当前的拥塞窗口是16KB,向服务器S连续发送2个最大段之后,成功收到服务器S发送的第一段的确认段,确认段中通告的接受窗口大
- linux环境下搭建一个基于tcp的客户端和服务器
- Linux c实现一个tcp文件服务器和客户端
- 【TCP】使用TCP协议写一个可以上传文件的服务器和客户端。
- Linux系统tcp模式下服务器与客户端通信(仅限一个客户端)
- Select I/O模型来实现一个并发处理多个客户端的TCP服务器
- Epoll 的tcp通信代码(服务器+客户端)
- Java基础知识强化之网络编程笔记09:TCP之客户端键盘录入服务器写到文本文件中
- linux c之网络编程之TCP(服务器和和客户端基础通信)
- Epoll 的tcp通信代码(服务器+客户端)
- VB.NET中TCP通讯代码(客户端和接受端集成在一个窗口中)
- 客户端C和服务器S之间建立一个TCP连接,该连接总是以1KB的最大段长发送TCP段,客户端C有足够的数据要发送。当拥塞窗口为16KB的时候发生超时,如果接下来的4个RTT往返时间内的TCP段的传输是成
- “TCP:三次握手”分析——以一个简单的“服务器”和“客户端”为例
- 关于socket应用:一个不断监听一个进程的服务器以及发送信息的客户端 TCP的三次握手和四次挥手
- TCP/TP编程 - 一个简单的Linux下C写的socket服务器客户端程序