这里主要包含客户机和服务器的编程。

一、编程模型函数化

  使用函数说明: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的更多相关文章

  1. TCP通讯程序设计

    TCP通讯程序设计 这里主要包含客户机和服务器的编程. 一.编程模型函数化 使用函数说明:socket的理解 服务器: 创建socket使用函数----->socket 绑定地址使用函数---- ...

  2. .Net开发笔记(十五) 基于“泵”的TCP通讯(接上篇)

    上一篇博客中说了基于“泵”的UDP通讯,附上了一个Demo,模拟飞鸽传书的功能,功能不太完善,主要是为了说明“泵”在编程中的应用.本篇文章我再附上一个关于TCP通讯的两个Demo,也都采用了“泵”模式 ...

  3. 简单的c# TCP通讯(TcpListener)

      简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TC ...

  4. 基于STM32和W5500的Modbus TCP通讯

    在最近的一个项目中需要实现Modbus TCP通讯,而选用的硬件平台则是STM32F103和W5500,软件平台则选用IAR EWAR6.4来实现. 1.移植千的准备工作 为了实现Modbus TCP ...

  5. 使用netty实现的tcp通讯中如何实现同步返回

    在netty实现的tcp通讯中,一切都是异步操作,这提高了系统性能,但是,有时候client需要同步等待消息返回,如何实现呢?笔者已经实现,在此总结下重点要素 实现要点: 1.消息结构设计 消息头中需 ...

  6. C#TCP通讯框架

    开源的C#TCP通讯框架 原来收费的TCP通讯框架开源了,这是一款国外的开源TCP通信框架,使用了一段时间,感觉不错,介绍给大家 框架名称是networkcomms 作者开发了5年多,目前已经停止开发 ...

  7. UDP通讯程序设计

    UDP通讯程序设计 一.函数化 1.1服务器使用的函数 创建socket----->socket 绑定地址-------->bind 接受数据-------->recvfrom 发送 ...

  8. 推荐一款开源的C#TCP通讯框架

    原来收费的TCP通讯框架开源了,这是一款国外的开源TCP通信框架,使用了一段时间,感觉不错,介绍给大家 框架名称是networkcomms 作者开发了5年多,目前已经停止开发,对于中小型的应用场景,够 ...

  9. ActiveMQ之 TCP通讯机制

    ActiveMQ支持多种通讯协议TCP/UDP等,我们选取最常用的TCP来分析ActiveMQ的通讯机制.首先我们来明确一个概念:  客户(Client):消息的生产者.消费者对ActiveMQ来说都 ...

随机推荐

  1. 分享第一次使用ProcessOn心得

    最近朋友推荐了我一款在线作图工具ProcessOn,感受使用了几天感觉确实很不错,在这里给大家分享一下! ProcessOn应该算的上是第一款完全免费在线作图工具,之前用过国外有类似的,不过都是付费的 ...

  2. mysql 导入数据库文件到指定数据库

    i:\mysql\bin>mysql  -u  用户名 -p  数据库名  <   i:/test.sql // (source "c:\adsense.sql" ) ...

  3. ASP.NET MVC4 & Entity Framework 6.0 IIS 部署出错解决方案

    博客地址 http://blog.csdn.net/foxdave 近期了解MVC4的时候弄了一个简单的小工程,使用Entity Framework作为Model,F5启动调试运行的时候没有问题,但是 ...

  4. c# Winforms WebBrowser - Clear all cookies

    Hello,   I recently search for a method to delete all cookies from the build in .NET WinForms WebBro ...

  5. JVM-对象的存活与死亡

    当Java虚拟机进行垃圾收集的时候,那么它必须要先判断对象,是否还存活,如果存活就不能对它进行回收.所以判断一个对象是否存活是Java虚拟机必须要实现的. 1.对象是否存活 1)引用计数器:给对象添加 ...

  6. pyqt5 笔记(二)实现http请求发送

    上个图~ index.py 文件 # -*- coding: utf-8 -*- from PyQt5 import QtWidgets,QtCore #从pyqt库导入QtWindget通用窗口类 ...

  7. 《java笔记 day07》

    //匿名对象_1 class Car { //描述属性: String color; int number; //描述行为: void run() { System.out.println(color ...

  8. hdu 2098

    ps:TLE一次....因为判断素数的时候没开方...作死.. 代码: #include "stdio.h" #include "math.h" int inp ...

  9. 2016-1-9 Quartz框架的学习,剪裁图片并设置边框

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  10. 一次蜿蜒曲折的RFID破解之路

    前言 早一段时间看到一篇看雪论坛关于逻辑嗅探破解接触式IC卡口令的文章,激起鄙人对rfid的兴趣.遂准备拿学校的卡一展身手. 0×00 前期准备 经过初步了解,学校的rfid卡片分为两种.校园卡采用M ...