TCP通讯程序设计

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

一、编程模型函数化

  使用函数说明:socket的理解

服务器:

创建socket使用函数----->socket

绑定地址使用函数------->bind

监听端口使用函数------->listen

等待连续使用函数------->accept

收发使用函数---------->recv/send

结束连续-------------->close

客户机:

创建socket使用函数----->socket

连接服务器函数--------->connect

收发使用函数----------->send/recv

结束连接使用函数------->close

二、首先编写服务器的代码

  touch tcp_server.c

  chmod 777 tcp_server.c

代码如下:

 #include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h> #define portnum 3333 int main()
{
int sockfd;
int new_fd;
char buffer[];
int sin_size;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int nbyte=10; //表示打印前10个字符
//1.创建套接字
if((sockfd = socket(AF_INET,SOCK_STREAM,)) == -)
{
printf("creat socket error!\n");
exit();
} //2.1设置绑定的地址
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(portnum);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //2.2绑定地址
bind(sockfd, (struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); //3.监听端口
listen(sockfd,); while()
{
//4.等待连接
sin_size = sizeof(struct sockaddr);
new_fd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size);
printf("server get connection %s\n",inet_ntoa(client_addr.sin_addr)); //5.接受数据
recv(new_fd,buffer,,);
buffer[nbyte] = '\0';
printf("server receive : %s\n",buffer); //6.结束连接
close(new_fd);
}
close(sockfd);
}

编译运行:gcc tcp_server.c -o tcp_server ---------->./tcp_server

三、编写客户机的代码

touch tcp_client.c

chmod 777 tcp_client.c

代码如下:

 #include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h> #define portnum 3333 int main()
{
int sockfd;
char buffer[];
struct sockaddr_in server_addr;
//1.创建套接字
if((sockfd = socket(AF_INET,SOCK_STREAM,)) == -)
{
printf("creat socket error!\n");
exit();
}
//2.1设置要连接色服务器的地址
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(portnum);
server_addr.sin_addr.s_addr = inet_addr("192.168.58.128"); //2.2连接服务器
if (connect(sockfd,(struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -)
{
printf("connect error! \n");
} //3.发送数据到服务器
printf("please input char:\n");
fgets(buffer,,stdin);
send(sockfd,buffer,strlen(buffer),);
//4.关闭连接
close(sockfd);
return ;
}

编译运行gcc tcp_client.c -o tcp_client-------------->./tcp_client

四、运行结果如下

1.服务器运行进入等待

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

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

TCP通讯程序设计的更多相关文章

  1. TCP通讯程序设计---5

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

  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. rabbitmq使用

    1. 用户管理 用户管理包括增加用户,删除用户,查看用户列表,修改用户密码. 相应的命令 (1) 新增一个用户 rabbitmqctl  add_user  Username  Password (2 ...

  2. MVC Create

    本文介绍如何在MVC里往数据库中插入新的记录. 这里用到的数据表如下: Employees Step 1: 在Control文件里加入method public ActionResult Create ...

  3. poj 1634

    题意:给你m个员工,和n次的查询. 每个员工有他独立的id,收入,和身高 上司的收入一定大于下属的收入,身高也是大于等于下属的. 每个公司的头头没有上司,上司的编号为0,,同时他也是收入最多身高最高的 ...

  4. Oracle java.sql.SQLException: 数字溢出

    六月 30, 2016 5:47:47 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinit ...

  5. C++函数传递指针面试题

    [本文链接] http://www.cnblogs.com/hellogiser/p/function-passing-pointer-interview-questions.html [代码1]   ...

  6. java mail api 使用

    所需要的jar包: http://pan.baidu.com/s/1qWGZRJm 如果遇到这个错误:在windows防火墙允许 javaw.exe访问网络.或者关闭防火墙 FATAL ERROR i ...

  7. 最简单粗暴的http文件列表

    :]: port = ])else: port = 8000server_address = ('127.0.0.1', port)Handler.protocol_version = Protoco ...

  8. 【leetcode】Same Tree(easy)

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  9. 【leetcode】Jump Game I & II (hard)

    Jump Game (middle) Given an array of non-negative integers, you are initially positioned at the firs ...

  10. 【python】类变量和对象变量

    来源:http://www.cnblogs.com/gtarcoder/p/5005897.html python是一种解释性的语言,任何变量可以在使用的时候才声明以及定义,也可以在程序运行的任何位置 ...