`

TCP程序设计

阅读更多

基于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程序设计

    ### TCP程序设计中的关键知识点 #### 1. TCP协议简介 - **定义**: TCP (Transmission Control Protocol) 是一种面向连接的、可靠的传输层协议,它确保数据能够无差错地到达目的地。 - **作用**: 在互联网中,TCP ...

    TCP程序设计(c语言课程设计)

    在本章中,我们将深入探讨TCP程序设计,特别是在C语言环境下的实现。TCP,全称为传输控制协议,是网络通信中的重要组成部分,以其面向连接、可靠传输的特点被广泛应用。本章的目标是通过C语言编程实践,使读者了解...

    TCP-IP程序设计

    TCP/IP程序设计是网络编程领域中的核心主题,它涉及到互联网通信协议栈的多个层次,包括应用层、传输层、网络层以及数据链路层。在这个课件中,你将深入理解如何利用这些协议进行有效且可靠的网络通信。 1. **TCP...

    linux下TCP程序

    TCP程序设计是网络编程的重要组成部分,涵盖了连接建立、数据传输和连接关闭等过程。以下是对`TcpServer.cpp`和`TcpClient.cpp`这两个文件可能涉及的TCP编程知识点的详细讲解: 1. **TCP连接流程**: - **三次握手...

    TCP.rar_Labview中TCP程序_labview TCP_labview tcp通信_labview中TCP通信

    本文将深入探讨LabVIEW中的TCP程序设计,包括如何实现TCP通信的主动和被动模式,以及如何在LabVIEW中应用这些技术。 TCP是一种网络协议,它确保了数据的顺序传输和错误检测,通过握手机制建立连接,并在数据传输...

    Java网络编程之TCP程序设计

    以下是对TCP程序设计的详细说明: 1. **TCP编程的基本步骤**: - **客户端(Client)**: - 创建`Socket`对象,通常使用`new Socket(InetAddress address, int port)`构造方法,其中`address`是服务器的IP地址,`...

    TCP/IP协议与网络编程技术

    第8章:介绍了TCP程序设计流程、基于C/C++的TCP程序设计实例和基于Java技术的TCP程序设计实例。 第9章:介绍了UDP程序设计流程、基于C/C++的UDP程序设计实例和基于Java技术的UDP程序设计实例。 第10章:介绍了使用...

    《CP程序设计基础》PPT课件.ppt

    《CP程序设计基础》PPT课件中主要介绍了TCP程序设计基础的相关知识,包括InetAddress类、ServerSocket类和TCP网络程序设计。 一、InetAddress类 InetAddress类是java.net包中的一员,主要用于处理与IP地址相关的...

    stm32tcp程序

    STM32TCP程序是基于STM32微控制器的TCP服务器实现,主要利用了STMicroelectronics的STM32F107型号芯片,并结合了LAN8720以太网接口芯片来实现网络通信功能。STM32F107是一款高性能、低功耗的ARM Cortex-M3内核微控制...

    TCP.rar_TCP-UDP服务管理_c tcp 服务器_tcp 客户端_客户 服务器 程序

    7. **TCP程序设计**:这个文件名暗示了压缩包内可能包含一个或多个关于TCP通信的C语言源代码文件,这些文件可能包含了服务器和客户端的实现,以及如何编译和运行它们的说明。 学习和理解TCP和UDP协议,以及如何使用...

    基于TCP局域网聊天程序设计

    ### 基于TCP局域网聊天程序设计详解 #### 一、系统设计要求与原理 **1.1 系统设计要求** 本系统旨在构建一个高效、直观且功能全面的局域网聊天平台,其核心需求包括: - **易用性**:用户界面简洁明了,操作流程...

    基于TCP和数据库的聊天程序设计说明书

    【标题】:“基于TCP和数据库的聊天程序设计说明书” 【描述】:“K-means聚类算法c语言实现。样本数据从文件读入,支持任意维数数据和任意k值(k当然要小于样本数),同时可以防止分出空类” 在设计一个基于TCP和...

    TCP/IP网络程序设计

    通过C++,实现网络聊天的功能,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。 由于服务器端要保存用户信息,我们...

    基于TCP的简单一对一聊天程序设计

    在聊天程序设计中,TCP的这些特性使得消息能够准确无误地到达对方。 设计一个简单的TCP聊天程序,我们需要考虑以下几个关键步骤: 1. **服务器端实现**:服务器端需要监听特定的端口,等待客户端的连接请求。在C++...

    计算机网络课程设计 TCP通信程序设计

    计算机网络课程设计中,TCP通信程序设计是一项重要的实践任务,旨在让学生深入了解TCP协议的工作原理以及如何在实际应用中实现基于TCP的通信系统。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、...

    java_sock_tcp.zip_java Tcp _tcp java

    本文将深入探讨Java中如何利用TCP进行网络通信,主要基于提供的“Java TCP”相关资料,特别是“031904_【第19章:Java网络编程】_TCP程序设计笔记.pdf”。 首先,TCP是一种面向连接的、可靠的传输层协议,它确保...

    TCP课程设计及课程设计报告

    【TCP课程设计及课程设计报告】是一份详细记录了作者在大二期间完成的基于TCP协议的客户端/服务器(C/S)程序设计的项目。在这个课程设计中,学生需要深入理解TCP/IP协议栈的工作原理,并运用这些知识来构建实际的...

    网络程序设计 关于TCP用C语言的实现

    网络程序设计 关于TCP用C语言的实现中的有关客户端的实现

    基于TCP的通信程序设计(C语言)

    答辩通过后,进一步修改的,没有问题。若有疑问请联系我  ... 客户端功能:向服务器提出TCP请求,当连接建立后,向服务器发送“I am a client.”的信息,接收并显示从服务器收到的信息,并断开服务器的连接。

Global site tag (gtag.js) - Google Analytics