`
dingran
  • 浏览: 376643 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

socket在Linux下小Demo

阅读更多

Ubuntu的终端用来搞c和c++真是太方便了,哪像windows下的turboC那么麻烦啊!

 

直接vi编辑一个.c 或 .cpp 文件,然后g++ 或 gcc 一编译,直接  ./a.out运行,真是太方便了。

 

不熟悉的函数直接man一下就ok了。好东西啊!

 

 

现在就用这东西学习一下socket吧:

 

1.首先搞一个服务端:

 

vi a.c

 

内容如下:

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 引入的三个头文件,是必需的:
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
// 两个结构体,下面要用的,实例化了?NO,没有实例化
// 只是重命名了,为什么要这样呢?
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR ;

// 入口main,注意参数,这个是要输入的启动参数,
// 例如:./service 9999,其中9999就是输入的参数
// 是个char数组,可以传入多个参数,按顺序
int main(int argc,char **argv)
{

        // 1.创建套接字
        // 参数:SOCK_DGRAM是基于UDP的socket通信模式,
        // 如果是TCP的话是SOCK_STREAM.
	int fd = socket(AF_INET, SOCK_DGRAM, 0);
	
	// 声明一个服务端和一个客户端的结构体对象:
	SOCKADDR_IN addrSrv ;
	SOCKADDR_IN addrClient;

	// 定义接收和发送的字符串
	char  recvBuf[100] = {0};
	char  sendBuf[100] = {0};

        // 服务端的长度,下面要用到
	int len = sizeof(addrSrv);

	// 服务端的地址,
 	// INADDR_ANY 可接受的客户端是任意地址
	addrSrv.sin_addr.s_addr = htonl(INADDR_ANY);
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_port = htons(atoi(argv[1]));// 服务端的端口号

	// 绑定套接字和端口
	bind(fd,(struct sockaddr *)&addrSrv,sizeof(addrSrv));


	while(1){
		// 接收客户端信息
		recvfrom(fd, recvBuf, 16, 0, (SOCKADDR*)&addrClient, &len);
		printf("recvBuf :%s\n",recvBuf);

		printf("please input data:\n");
		fgets(sendBuf,100,stdin);
		// 发送给客户端信息
		sendto(fd,sendBuf,20,0,(SOCKADDR*)&addrClient, len);

	}

	// 关闭套接字
	close(fd);
	// 可以有或没有return 1;

}
 

 

2.构建一个客户端:

 

vi b.c

 

代码如下:

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 引入的三个头文件,是必需的:
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>

typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR ;
int main(int argc,char **argv)
{
	int fd = socket(AF_INET, SOCK_DGRAM, 0);
	SOCKADDR_IN addrSrv ;
	SOCKADDR_IN addrClient;
	char  recvBuf[100] = {0};
	char  sendBuf[100] = {0};
	int len = sizeof(addrClient);

	// 此处的输入的第二个参数是指定服务端的ip地址
	addrSrv.sin_addr.s_addr = inet_addr(argv[2]);
	addrSrv.sin_family = AF_INET;
        // 输入的第一个参数,服务端的端口号
	addrSrv.sin_port = htons(atoi(argv[1]));

// 跟服务端的不同之处,不用绑定套接字和端口
//	bind(fd,(struct sockaddr *)&addrSrv,sizeof(addrSrv));

	while(1)
	{
		printf("please inpur data\n");
		fgets(sendBuf,100,stdin);
		sendto(fd,sendBuf,20,0,(SOCKADDR*)&addrSrv, len);
		recvfrom(fd, recvBuf, 16, 0, (SOCKADDR*)&addrClient, &len);
		printf("recvBuf %s\n",recvBuf);
	}

	close(fd);
	return 0;
}
 

两者差别不多,只两点:1.客户端需要指定服务端的ip和端口,所以执行的时候需要输入端口和ip。

 

                                            2.客户端不需要绑定端口。

 

 

3.编译:

 

gcc a.c -o server

 

 

gcc b.c -o client

 

 

4.运行:

 

./server 9999

 

从另一个终端运行:

 

./client  9999 192.168.*.*

 

 

5.结果,不同的终端代表不同的进程,通过输入和打印出的信息就能证明两者开始交互了。

 

 

 

 

分享到:
评论

相关推荐

    linux socket通信DEMO

    本程序实现了linux c编程的socket通信代码,这个代码是基于不建立连接的通信,使用linux的gcc编程器或是arm-none-....嵌入式编译器可以编译通过,实现双向通信,通信时间间隔10ms

    Linux window下C开发socket通讯demo

    这个"Linux window下C开发socket通讯demo"旨在为初学者提供一个简化的示例,演示如何在Linux和Windows操作系统上使用C语言进行socket编程。下面将详细解释相关知识点。 1. **Socket概念**: Socket是进程间通信...

    linux下聊天的demo

    在Linux操作系统中,开发网络应用程序通常会涉及到套接字(socket)编程,特别是在构建聊天应用时。本示例"linux下聊天的demo"提供了一个基于epoll接口的简单聊天程序,它支持一对一聊天以及消息群发功能。epoll是...

    HP-Socket_Linux

    HP-Socket_Linux为Linux端示例程序,示例Demo包含服务端(HPServer)、客户端(HPClient),示例Demo简单地演示了在Linux下如何使用HP-Socket通信模块库。另有HP-Socket_Windows端示例Demo,请移步下载。

    HPsocket5.7.2中文支持库 Demo(20200531添加Sqlite3数据库操作方法).rar

    在HPsocket5.7.2 Demo中集成Sqlite3,意味着开发者可以方便地将网络通信与本地数据存储结合起来,实现数据的同步和备份,或者在网络应用中进行用户数据的管理。 使用这个Demo时,首先需要确保已经安装了易语言VS...

    socketdemo 一个用来学习socket入门的例子

    SocketDemo 是一个专门为Java初学者设计的用于学习和理解Socket通信基础的实例项目。Socket编程是网络编程的重要组成部分,它提供了进程间通过网络进行通信的能力。在这个例子中,我们将深入探讨Socket编程的基本...

    linux下基于Bluez实现蓝牙SPP服务端demo

    蓝牙模块服务多种多样,这个小demo实现了linux下建立蓝牙服务端的demo,并带了一个客户端测试。 使用时,可通过两台设备,分别作为服务端可客户端,连接时填入对方地址即可开启测试。服务端建立后,客户端可通过...

    linux下can收发报文demo

    在Linux环境下,CAN(Controller Area Network)总线是一种...通过这个"linux下can收发报文demo",开发者可以学习到如何在Linux系统中利用socketCAN进行CAN通信,并实现监控和统计功能,为实际项目开发打下坚实基础。

    PHP LINUX socket DEMO

    php环境 调用框架使用socks服务 主机是阿里云centos6.8环境(window目前没写文档)

    opencv与socket在linux上的实现

    opencv与socket在linux上的实现

    海康威视JavaDemo_Linux64.zip

    在Linux环境下,这个Java Demo可能包含了必要的库文件(.jar)以及示例源代码(.java)。开发者可以通过编译源代码并运行来查看演示效果。海康威视的SDK可能会提供如视频流获取、图像捕获、云台控制、报警处理等功能...

    raw socket demo

    在标题"raw socket demo"中,我们看到的是一个关于raw socket的实际演示应用。通常,这样的演示会包含创建原始套接字、发送自定义报文头以及接收网络数据的代码示例。通过这个demo,开发者可以学习如何直接操作网络...

    Linux下海康监控JAVA源码demo

    此“Linux下海康监控JAVA源码demo”提供了一个基于Java的示例,使得开发者能够在Linux系统中直接进行相关功能的测试和开发。以下是这个Java源码demo可能涵盖的关键知识点: 1. **Java网络编程**:海康监控设备通常...

    socket用法,经典Demo

    在这个经典Demo中,我们将深入探讨Socket的基本概念、工作原理以及如何在实际开发中运用。 首先,Socket是操作系统提供的一种通信机制,它允许两个网络应用程序之间建立连接并交换数据。在TCP/IP协议栈中,Socket...

    Linux 本地Socket通讯

    在Linux操作系统中,Socket通信是一种广泛使用的进程间通信(IPC,Inter-Process Communication)方式,不仅应用于网络通信,还常用于同一台机器上的本地进程间通信。本篇将深入探讨"Linux 本地Socket通讯"这一主题...

    基于socket和opencv在linux中实现摄像头实时数据传送

    linux下实现的摄像头实时视频数据传输demo,可根据自己的需求更改,可用cmake编译(需完整安装opencv),也可用g++编译(需部分编译pence库-lopencv_core -lopencv_video -lopencv_highgui -lopencv_imgproc):...

    SuperSocket测试Demo

    2. **高性能**:SuperSocket采用异步I/O模型,确保了高并发下的性能表现。 3. **简单易用**:提供简洁的API接口,降低学习成本,让开发者能快速上手。 4. **跨平台**:SuperSocket基于.NET Framework,但也可以...

    socket_api.rar_DEMO_socket_socket封装

    在Linux或Windows系统中,C语言通常被用来编写socket程序,因为它提供了直接操作底层网络协议的能力。 在实际开发中,直接使用原始的socket API进行编程可能会涉及很多细节,如错误处理、连接管理、数据编码解码等...

    linux下用C写的基于SSL 的TCP例子代码!

    在Linux环境下,使用C语言编写基于SSL(Secure Socket Layer)的TCP程序是一项常见的任务,尤其在开发安全通信软件时。SSL是一种网络安全协议,用于在Internet上提供加密通信和身份验证。下面将详细介绍如何在Linux...

    Linux_c++_select_demo

    总的来说,这个`Linux_c++_select_demo`可以帮助开发者了解如何在C++中使用`select`来实现高效的多路复用I/O,这对于构建高并发服务器或者理解网络编程的基本原理非常有帮助。通过学习和分析这个示例,你可以掌握...

Global site tag (gtag.js) - Google Analytics