首页 > 其他分享 >TCP简单的服务端代码(C语言)

TCP简单的服务端代码(C语言)

时间:2023-12-13 21:14:20浏览次数:26  
标签:addr int my TCP C语言 sockfd include buf 服务端

 1 #include <stdio.h>
 2 #include <strings.h>    //bzero
 3 #include <unistd.h>     //close
 4 #include <sys/socket.h> //socket
 5 #include <netinet/in.h> //struct sockaddr_in
 6 #include <arpa/inet.h>  //inet_addr
 7 int main(int argc, char const *argv[])
 8 {
 9     // 1.创建套接字
10     int sockfd = socket(AF_INET, SOCK_STREAM, 0);
11     if (sockfd < 0)
12     {
13         perror("socket");
14         return -1;
15     }
16     // 2.绑定bind
17     struct sockaddr_in my_addr;
18     my_addr.sin_family = AF_INET;
19     my_addr.sin_port = htons(8000);
20     my_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 机器的所有可用IP地址
21     int ret = bind(sockfd, (struct sockaddr *)&my_addr, sizeof(my_addr));
22     if (ret != 0)
23     {
24         perror("bind");
25         return -1;
26     }
27     // 3.监听
28     int backlog = 10;
29     ret = listen(sockfd, backlog);
30     if (ret < 0)
31     {
32         perror("listen");
33         return -1;
34     }
35     // 4.提取,等待一个客户端连接
36     struct sockaddr_in cli_addr;
37     socklen_t len = sizeof(cli_addr);
38     int sockfd_new = accept(sockfd, (struct sockaddr *)&cli_addr, &len);
39     if (sockfd_new < 0)
40     {
41         perror("accept");
42         return -1;
43     }
44     // 5.接收数据
45     char buf[1024] = "";
46     char ip[16] = "";
47     while (1)
48     {
49         bzero(buf, sizeof(buf));
50         recv(sockfd_new, buf, sizeof(buf), 0);
51         inet_ntop(AF_INET, (void *)&cli_addr.sin_addr, ip, 16);
52         printf("%s:%hu--->%s\n", ip, ntohs(cli_addr.sin_port), buf); // ip port buf
53         send(sockfd_new, "ok", sizeof("ok"), 0);                     // 发送消息
54     }
55     // 6.关闭套接字
56     close(sockfd_new);
57     close(sockfd);
58     return 0;
59 }

 

 

标签:addr,int,my,TCP,C语言,sockfd,include,buf,服务端
From: https://www.cnblogs.com/mengyaoli/p/17899914.html

相关文章

  • c语言中的memste函数
    当我们在编程中需要对内存进行操作时,就会用到memste函数。memste函数是C语言中的一个标准库函数,用于将指定的内存块设置为指定的值。memste函数的原型为:void*memste(void*ptr,intvalue,size_tnum);其中,ptr是要设置的内存块的起始地址,value是要设置的值,num是要设置的字节数。......
  • GO TCP代理(可代理SQLSERVER\MYSQL\ORCALE)
    用nginx代理不知道为什么内网能用,外网用不了,改用go写个代理临时用下,直接上代码 packagemainimport( "fmt" "io" "log" "net")varaddrstring="0.0.0.0:51415"//代理服务端口vardest_addrstring="192.168.2.120:1433"//目标地址......
  • 实验6 C语言结构体、枚举应用编程
    1.实验任务1【验证性实验】2.实验任务2【验证性实验】3.实验任务3【验证性实验】4.实验任务4task4源代码:1#include<stdio.h>2#include<stdlib.h>3#defineN1045typedefstruct{6charisbn[20];//isbn号7charname[80];......
  • TCP简单的客户端代码(C语言)
    1#include<stdio.h>2#include<unistd.h>3#include<sys/socket.h>4#include<netinet/in.h>5#include<arpa/inet.h>6intmain(intargc,charconst*argv[])7{8//1.创建套接字(TCP)9intsockfd=socket(AF_......
  • C语言技巧
    隐藏在C语言里面的奇技淫巧对齐到最近的8的倍数。这个表达式(size+7)&~(7)是一个常见的位操作技巧,用于将size向上对齐到最近的8的倍数。~(7):首先,7的二进制表示是0111。按位取反~操作会将所有的1变为0,所有的0变为1,所以~(7)就是1...1000。size+7:这个操作是将......
  • TCP详解
    1.TCP介绍TCP是面向连接的、可靠的、基于字节流的传输层通信协议。2.TCP头格式源端口号/目的端口号序号解决包乱序问题确认序列目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决丢包的问题。首部长度表示TCP首部有多少个(4字节)的......
  • 实验6 C语言结构体、枚举应用编程
    1.实验任务1源代码1//P286例8.172//对教材上的程序作了微调整,把输出学生信息单独编写成一个函数模块3//打印不及格学生信息和所有学生信息程分别调用45#include<stdio.h>6#include<string.h>7#defineN3//运行程序输入测试时,可......
  • c语言,任意位置插入字符或者字符串
    char*insert(char*s1,char*s2,intn){intlen1=0,len2=0,i,j=0,k=0;charstr3[100];if(s1==NULL){returnNULL;}if(s2==NULL){returns1;}len1=strlen(s1);if(n>strlen(s1))......
  • TCP连接断开:为什么要挥手四次
    本文分享自华为云社区《解密TCP连接断开:四次挥手的奥秘和数据传输的安全》,作者:努力的小雨。TCP连接断开在当今数字化时代,互联网已经成为了人们生活中不可或缺的一部分。而在互联网的基础之上,TCP协议扮演着关键的角色,它负责着数据在网络中的可靠传输。在TCP连接的建立过程中,我......
  • C语言入门这一篇就够了(入门篇1)
    C语言是什么C语言是一种广泛使用的通用编程语言,它是由美国计算机科学家DennisRitchie于1972年在贝尔实验室开发出来的。C语言的设计原则是让程序员有更多的自由度,以方便控制硬件,从而提高程序的运行效率。它支持结构化编程、词汇变量作用域和递归等功能,并且可以直接访问物理内存地......