学习初步练习基于c语言的socket编程

本文介绍了基于C语言的TCP套接字编程基础知识,包括理解socket、创建套接字、建立连接、数据传输和连接释放的步骤。在Windows环境下,通过VS2019实现了客户端和服务器端的简单通信示例,强调了字符集设置的重要性。
摘要由CSDN通过智能技术生成

一、理解socket

  1. 套接字
    应用进程跨网络的通信需要用到socket套接字实现,在TCP/IP协议中,“IP地址+TCP或UDP“唯一的标识了网络通信中的一个进程,这也就叫做一个套接字。

  2. 套接字产生

     引入套接字就不得不介绍一下**系统调用**和**应用编程接口**。
     当我们有一些特定的应用需要互联网的支持,但这些应用又不能直接使用已经标准化的互联网协议,那么我们应当做哪些工作?
     大多数操作使用**系统调用**(system call)的机制在应用程序和操作系统之间传递控制权。
    

多个应用进程使用系统调用的机制
当某个应用进程启动系统调用时,控制权就从应用进程传递给系统调用接口。此接口再把控制权传递给操作系统,操作系统把这个调用转给某个内部过程,并执行所请求的操作。内部操作一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。因此,系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口。由于应用进程在使用系统调用接口之前要编写一些程序,特别是要设置系统调用中的许多参数,因此这种系统调用接口又称为应用编程接口API(Application Programming Interface) 。现在的TCP/IP协议软件已经驻留在操作系统中了。由于TCP/IP协议族被设计成能够运行在多种操作系统的环境中,因此TCP/IP标准没有规定应用程序与TCP/IP协议软件如何接口的细节,而是允许系统设计者能够选择有关API的具体实现细节。目前只有几种可供应用程序使用TCP/IP的应用编程接口API,其中最著名的就是美国加利福尼亚大学伯克利分校为Berkeley UNIX操作系统定义的一种API,它又称为套接字接口(socket interface)。微软在其操作系统中采用了套接字接口API,形成了一个稍有不同的API,并称之为Windows Socket,简称WinSock。(小编在这里只用了微软的)

1.在这里插入图片描述
3.调用socket创建套接字
在这里插入图片描述

  1. 以使用TCP服务为例的系统调用
    4.1.建立连接阶段
    当套接字被创建后,它的端口号和地址都是空的,进程需要调用Bind来指明套接字本地地址(本地端口号和IP地址)。在服务器端Bind就是把熟知端口号本地IP地址填写到自己创建的套接字里。
    服务器调用Bind后还必须调用Listen把套接字设置为被动模式,随时接受客户端服务请求。
    服务器紧接着调用accept,把远程客户端发送的连接请求提取出来。此处可以并发,因为处理了多个连接请求。
    4.2.数据传送阶段
    客户和服务器都在TCP连接上使用send系统调用传送数据,使用recv系统调用接收数据。而各函数的定义可在编译器中具体查看。
    4.3.连接释放
    客户或服务器结束使用套接字,就把套接字撤销。调用close。系统调用使用顺序

二、具体实现
实现环境:vs2019,c语言,

//server.c端完整代码
#include<stdio.h>
#include<windows.h>
#pragma comment(lib,"ws2_32.lib")

SOCKADDR_IN cAddr = {
    0 };
int len = sizeof cAddr;
SOCKET clientSocket[1024];
int count = 0;

void tonxin(int idx)
{
   
	char buff[1024];
	int r;
	while (1)
	{
   
		r = recv(clientSocket[idx], buff, 1023, NULL);
		if (r > 0)
		{
   
			buff[r] = 0;
			printf("%d:%s\n", idx, buff);
			//广播数据
			for (int i = 0; i < count; i++)
			{
   
				send(clientSocket[i], buff, strlen(buff), NULL);

			}
		}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值