基于TCP——服务器
程序设计步骤:1.创建一个socket,用函数socket();
2.绑定IP地址、端口等信息到socket上,用函数bind();
3.设置允许的最大连接数,用函数listen();
4.等待来自客户端的连接请求,用函数accept();
5.收发数据,用函数send()和recv(),或者read()和write();
6.关闭网络连接。
基于TCP——客户端
程序设计步骤:1.创建一个socket,用函数socket();
2.设置要连接的服务器IP地址和端口等属性。
3.连接服务器,用函数connect();
4.收发数据,用函数send()和recv(),或者read()和write();
5.关闭网络连接。
基于TCP——通讯模型
一个程序实例
tcp_server.c如下:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define portnumber 3333
int main(int argc, char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size;
int nbytes;
char buffer[1024];
/* 服务器端开始建立sockfd描述符 */
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) // AF_INET:IPV4;SOCK_STREAM:TCP
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
exit(1);
}
/* 服务器端填充 sockaddr结构 */
bzero(&server_addr,sizeof(struct sockaddr_in)); // 初始化,置0
server_addr.sin_family=AF_INET; // Internet
server_addr.sin_addr.s_addr=htonl(INADDR_ANY); // (将本机器上的long数据转化为网络上的long数据)和任何主机通信 //INADDR_ANY 表示可以接收任意IP地址的数据,即绑定到所有的IP
//server_addr.sin_addr.s_addr=inet_addr("192.168.1.1"); //用于绑定到一个固定IP,inet_addr用于把数字加格式的ip转化为整形ip
server_addr.sin_port=htons(portnumber); // (将本机器上的short数据转化为网络上的short数据)端口号
/* 捆绑sockfd描述符到IP地址 */
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
exit(1);
}
/* 设置允许连接的最大客户端数 */
if(listen(sockfd,5)==-1)
{
fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
exit(1);
}
while(1)
{
/* 服务器阻塞,直到客户程序建立连接 */
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
{
fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
exit(1);
}
fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr)); // 将网络地址转换成.字符串
if((nbytes=read(new_fd,buffer,1024))==-1)
{
fprintf(stderr,"Read Error:%s\n",strerror(errno));
exit(1);
}
buffer[nbytes]='\0';
printf("Server received %s\n",buffer);
/* 这个通讯已经结束 */
close(new_fd);
/* 循环下一个 */
}
/* 结束通讯 */
close(sockfd);
exit(0);
}
tcp_client.c如下:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define portnumber 3333
int main(int argc, char *argv[])
{
int sockfd;
char buffer[1024];
struct sockaddr_in server_addr;
struct hostent *host;
/* 使用hostname查询host 名字 */
if(argc!=2)
{
fprintf(stderr,"Usage:%s hostname \a\n",argv[0]);
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
fprintf(stderr,"Gethostname error\n");
exit(1);
}
/* 客户程序开始建立 sockfd描述符 */
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) // AF_INET:Internet;SOCK_STREAM:TCP
{
fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
exit(1);
}
/* 客户程序填充服务端的资料 */
bzero(&server_addr,sizeof(server_addr)); // 初始化,置0
server_addr.sin_family=AF_INET; // IPV4
server_addr.sin_port=htons(portnumber); // (将本机器上的short数据转化为网络上的short数据)端口号
server_addr.sin_addr=*((struct in_addr *)host->h_addr); // IP地址
/* 客户程序发起连接请求 */
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
exit(1);
}
/* 连接成功了 */
printf("Please input char:\n");
/* 发送数据 */
fgets(buffer,1024,stdin);
write(sockfd,buffer,strlen(buffer));
/* 结束通讯 */
close(sockfd);
exit(0);
}
(完)
分享到:
相关推荐
### TCP程序设计中的关键知识点 #### 1. TCP协议简介 - **定义**: TCP (Transmission Control Protocol) 是一种面向连接的、可靠的传输层协议,它确保数据能够无差错地到达目的地。 - **作用**: 在互联网中,TCP ...
在本章中,我们将深入探讨TCP程序设计,特别是在C语言环境下的实现。TCP,全称为传输控制协议,是网络通信中的重要组成部分,以其面向连接、可靠传输的特点被广泛应用。本章的目标是通过C语言编程实践,使读者了解...
TCP/IP程序设计是网络编程领域中的核心主题,它涉及到互联网通信协议栈的多个层次,包括应用层、传输层、网络层以及数据链路层。在这个课件中,你将深入理解如何利用这些协议进行有效且可靠的网络通信。 1. **TCP...
TCP程序设计是网络编程的重要组成部分,涵盖了连接建立、数据传输和连接关闭等过程。以下是对`TcpServer.cpp`和`TcpClient.cpp`这两个文件可能涉及的TCP编程知识点的详细讲解: 1. **TCP连接流程**: - **三次握手...
本文将深入探讨LabVIEW中的TCP程序设计,包括如何实现TCP通信的主动和被动模式,以及如何在LabVIEW中应用这些技术。 TCP是一种网络协议,它确保了数据的顺序传输和错误检测,通过握手机制建立连接,并在数据传输...
以下是对TCP程序设计的详细说明: 1. **TCP编程的基本步骤**: - **客户端(Client)**: - 创建`Socket`对象,通常使用`new Socket(InetAddress address, int port)`构造方法,其中`address`是服务器的IP地址,`...
第8章:介绍了TCP程序设计流程、基于C/C++的TCP程序设计实例和基于Java技术的TCP程序设计实例。 第9章:介绍了UDP程序设计流程、基于C/C++的UDP程序设计实例和基于Java技术的UDP程序设计实例。 第10章:介绍了使用...
《CP程序设计基础》PPT课件中主要介绍了TCP程序设计基础的相关知识,包括InetAddress类、ServerSocket类和TCP网络程序设计。 一、InetAddress类 InetAddress类是java.net包中的一员,主要用于处理与IP地址相关的...
STM32TCP程序是基于STM32微控制器的TCP服务器实现,主要利用了STMicroelectronics的STM32F107型号芯片,并结合了LAN8720以太网接口芯片来实现网络通信功能。STM32F107是一款高性能、低功耗的ARM Cortex-M3内核微控制...
7. **TCP程序设计**:这个文件名暗示了压缩包内可能包含一个或多个关于TCP通信的C语言源代码文件,这些文件可能包含了服务器和客户端的实现,以及如何编译和运行它们的说明。 学习和理解TCP和UDP协议,以及如何使用...
### 基于TCP局域网聊天程序设计详解 #### 一、系统设计要求与原理 **1.1 系统设计要求** 本系统旨在构建一个高效、直观且功能全面的局域网聊天平台,其核心需求包括: - **易用性**:用户界面简洁明了,操作流程...
【标题】:“基于TCP和数据库的聊天程序设计说明书” 【描述】:“K-means聚类算法c语言实现。样本数据从文件读入,支持任意维数数据和任意k值(k当然要小于样本数),同时可以防止分出空类” 在设计一个基于TCP和...
通过C++,实现网络聊天的功能,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。 由于服务器端要保存用户信息,我们...
在聊天程序设计中,TCP的这些特性使得消息能够准确无误地到达对方。 设计一个简单的TCP聊天程序,我们需要考虑以下几个关键步骤: 1. **服务器端实现**:服务器端需要监听特定的端口,等待客户端的连接请求。在C++...
计算机网络课程设计中,TCP通信程序设计是一项重要的实践任务,旨在让学生深入了解TCP协议的工作原理以及如何在实际应用中实现基于TCP的通信系统。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、...
本文将深入探讨Java中如何利用TCP进行网络通信,主要基于提供的“Java TCP”相关资料,特别是“031904_【第19章:Java网络编程】_TCP程序设计笔记.pdf”。 首先,TCP是一种面向连接的、可靠的传输层协议,它确保...
【TCP课程设计及课程设计报告】是一份详细记录了作者在大二期间完成的基于TCP协议的客户端/服务器(C/S)程序设计的项目。在这个课程设计中,学生需要深入理解TCP/IP协议栈的工作原理,并运用这些知识来构建实际的...
网络程序设计 关于TCP用C语言的实现中的有关客户端的实现
答辩通过后,进一步修改的,没有问题。若有疑问请联系我 ... 客户端功能:向服务器提出TCP请求,当连接建立后,向服务器发送“I am a client.”的信息,接收并显示从服务器收到的信息,并断开服务器的连接。