TCP通讯程序设计---5
这里主要包含客户机和服务器的编程。
一、编程模型函数化

使用函数说明:socket的理解
服务器:
创建socket使用函数----->socket
绑定地址使用函数------->bind
监听端口使用函数------->listen
等待连续使用函数------->accept
收发使用函数---------->recv/send
结束连续-------------->close
客户机:
创建socket使用函数----->socket
连接服务器函数--------->connect
收发使用函数----------->send/recv
结束连接使用函数------->close
二、首先编写服务器的代码
touch tcp_server.c
chmod 777 tcp_server.c
代码如下:

1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <sys/socket.h>
4 #include <string.h>
5 #include <netinet/in.h>
6
7 #define portnum 3333
8
9 int main()
10 {
11 int sockfd;
12 int new_fd;
13 char buffer[128];
14 int sin_size;
15 struct sockaddr_in server_addr;
16 struct sockaddr_in client_addr;
17 int nbyte=10; //表示打印前10个字符
18 //1.创建套接字
19 if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
20 {
21 printf("creat socket error!\n");
22 exit(1);
23 }
24
25 //2.1设置绑定的地址
26 bzero(&server_addr,sizeof(struct sockaddr_in));
27 server_addr.sin_family = AF_INET;
28 server_addr.sin_port = htons(portnum);
29 server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
30
31 //2.2绑定地址
32 bind(sockfd, (struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
33
34 //3.监听端口
35 listen(sockfd,5);
36
37 while(1)
38 {
39 //4.等待连接
40 sin_size = sizeof(struct sockaddr);
41 new_fd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size);
42 printf("server get connection %s\n",inet_ntoa(client_addr.sin_addr));
43
44 //5.接受数据
45 recv(new_fd,buffer,128,0);
46 buffer[nbyte] = '\0';
47 printf("server receive : %s\n",buffer);
48
49 //6.结束连接
50 close(new_fd);
51 }
52 close(sockfd);
53 }

编译运行:gcc tcp_server.c -o tcp_server ---------->./tcp_server
三、编写客户机的代码
touch tcp_client.c
chmod 777 tcp_client.c
代码如下:

1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/socket.h>
4 #include <sys/types.h>
5 #include <netinet/in.h>
6
7 #define portnum 3333
8
9 int main()
10 {
11 int sockfd;
12 char buffer[128];
13 struct sockaddr_in server_addr;
14 //1.创建套接字
15 if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
16 {
17 printf("creat socket error!\n");
18 exit(1);
19 }
20 //2.1设置要连接色服务器的地址
21 bzero(&server_addr,sizeof(struct sockaddr_in));
22 server_addr.sin_family = AF_INET;
23 server_addr.sin_port = htons(portnum);
24 server_addr.sin_addr.s_addr = inet_addr("192.168.58.128");
25
26 //2.2连接服务器
27 if (connect(sockfd,(struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)
28 {
29 printf("connect error! \n");
30 }
31
32 //3.发送数据到服务器
33 printf("please input char:\n");
34 fgets(buffer,128,stdin);
35 send(sockfd,buffer,strlen(buffer),0);
36 //4.关闭连接
37 close(sockfd);
38 return 0;
39 }

编译运行gcc tcp_client.c -o tcp_client-------------->./tcp_client
四、运行结果如下
1.服务器运行进入等待

2.在客户机等待输入的字符中输入字符

3.可以看到服务器收到信息并且打印出来

TCP通讯程序设计---5的更多相关文章
- TCP通讯程序设计
TCP通讯程序设计 这里主要包含客户机和服务器的编程. 一.编程模型函数化 使用函数说明:socket的理解 服务器: 创建socket使用函数----->socket 绑定地址使用函数---- ...
- .Net开发笔记(十五) 基于“泵”的TCP通讯(接上篇)
上一篇博客中说了基于“泵”的UDP通讯,附上了一个Demo,模拟飞鸽传书的功能,功能不太完善,主要是为了说明“泵”在编程中的应用.本篇文章我再附上一个关于TCP通讯的两个Demo,也都采用了“泵”模式 ...
- 简单的c# TCP通讯(TcpListener)
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TC ...
- 基于STM32和W5500的Modbus TCP通讯
在最近的一个项目中需要实现Modbus TCP通讯,而选用的硬件平台则是STM32F103和W5500,软件平台则选用IAR EWAR6.4来实现. 1.移植千的准备工作 为了实现Modbus TCP ...
- 使用netty实现的tcp通讯中如何实现同步返回
在netty实现的tcp通讯中,一切都是异步操作,这提高了系统性能,但是,有时候client需要同步等待消息返回,如何实现呢?笔者已经实现,在此总结下重点要素 实现要点: 1.消息结构设计 消息头中需 ...
- C#TCP通讯框架
开源的C#TCP通讯框架 原来收费的TCP通讯框架开源了,这是一款国外的开源TCP通信框架,使用了一段时间,感觉不错,介绍给大家 框架名称是networkcomms 作者开发了5年多,目前已经停止开发 ...
- UDP通讯程序设计
UDP通讯程序设计 一.函数化 1.1服务器使用的函数 创建socket----->socket 绑定地址-------->bind 接受数据-------->recvfrom 发送 ...
- 推荐一款开源的C#TCP通讯框架
原来收费的TCP通讯框架开源了,这是一款国外的开源TCP通信框架,使用了一段时间,感觉不错,介绍给大家 框架名称是networkcomms 作者开发了5年多,目前已经停止开发,对于中小型的应用场景,够 ...
- ActiveMQ之 TCP通讯机制
ActiveMQ支持多种通讯协议TCP/UDP等,我们选取最常用的TCP来分析ActiveMQ的通讯机制.首先我们来明确一个概念: 客户(Client):消息的生产者.消费者对ActiveMQ来说都 ...
随机推荐
- Apache—DBUtils
简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影 ...
- outlook新邮件到达提醒设置以及outlook最小化到托盘设置
有些邮件是需要马上处理的,因此希望能在收到邮件之后马上就知道,但是有不希望频繁的去检查有没有.outlook可以帮我们轻松做到新邮件到达提醒. 一 .设置outlook新邮件到达提醒:选项->电 ...
- Section 1.4 Mother's Milk
又是一道怨念已久的题目0 0之前深搜写过广搜写过,怎么就是卡死,我还以为FP坏了重新装了一遍.今天偶尔翻起来,发现广搜忘记inc(head)了…简直哭瞎… 简单的广搜,分类比较多,不过不太要动脑子.至 ...
- Cisco IOS Debug Command Reference I through L
debug iapp through debug ip ftp debug iapp : to begin debugging of IAPP operations(in privileged EXE ...
- swing Event-Listener-Adapter 对照表
Source Event Event Listener AbstractButton (JButton,JToggleButton, JCheckBox,JRadioButton ActionEven ...
- JAVA之关于super的用法
JAVA之关于super的用法 路漫漫其修远兮,吾将上下而求索.——屈原<离骚> 昨天写this用法总结的时候,突然产生了一个问题,请教别人之后,有了自己的一点认识.还是把它写下来,为 ...
- [安卓]softap
http://www.cnblogs.com/javawebsoa/archive/2013/05/29/3106758.html
- combox源码解析
/** * jQuery EasyUI 1.3.2 * * Copyright (c) 2009-2013 www.jeasyui.com. All rights reserved. * * Lice ...
- mysql 创建存储过程注意
最近在利用navicat创建存储过程时,总是报1064语法错误,而且每次都是指向第一行,百思不得姐,如下图: 后来发现,原来是输入参数没有定义长度导致,所以以后真要注意 加上入参长度即可:IN `sT ...
- oracle 之关键字exists
-----------------------------------------------------------------------SQL中EXISTS的用法---------------- ...