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来说都 ...
随机推荐
- 分享第一次使用ProcessOn心得
最近朋友推荐了我一款在线作图工具ProcessOn,感受使用了几天感觉确实很不错,在这里给大家分享一下! ProcessOn应该算的上是第一款完全免费在线作图工具,之前用过国外有类似的,不过都是付费的 ...
- mysql 导入数据库文件到指定数据库
i:\mysql\bin>mysql -u 用户名 -p 数据库名 < i:/test.sql // (source "c:\adsense.sql" ) ...
- ASP.NET MVC4 & Entity Framework 6.0 IIS 部署出错解决方案
博客地址 http://blog.csdn.net/foxdave 近期了解MVC4的时候弄了一个简单的小工程,使用Entity Framework作为Model,F5启动调试运行的时候没有问题,但是 ...
- c# Winforms WebBrowser - Clear all cookies
Hello, I recently search for a method to delete all cookies from the build in .NET WinForms WebBro ...
- JVM-对象的存活与死亡
当Java虚拟机进行垃圾收集的时候,那么它必须要先判断对象,是否还存活,如果存活就不能对它进行回收.所以判断一个对象是否存活是Java虚拟机必须要实现的. 1.对象是否存活 1)引用计数器:给对象添加 ...
- pyqt5 笔记(二)实现http请求发送
上个图~ index.py 文件 # -*- coding: utf-8 -*- from PyQt5 import QtWidgets,QtCore #从pyqt库导入QtWindget通用窗口类 ...
- 《java笔记 day07》
//匿名对象_1 class Car { //描述属性: String color; int number; //描述行为: void run() { System.out.println(color ...
- hdu 2098
ps:TLE一次....因为判断素数的时候没开方...作死.. 代码: #include "stdio.h" #include "math.h" int inp ...
- 2016-1-9 Quartz框架的学习,剪裁图片并设置边框
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...
- 一次蜿蜒曲折的RFID破解之路
前言 早一段时间看到一篇看雪论坛关于逻辑嗅探破解接触式IC卡口令的文章,激起鄙人对rfid的兴趣.遂准备拿学校的卡一展身手. 0×00 前期准备 经过初步了解,学校的rfid卡片分为两种.校园卡采用M ...