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 c编程的socket通信代码,这个代码是基于不建立连接的通信,使用linux的gcc编程器或是arm-none-....嵌入式编译器可以编译通过,实现双向通信,通信时间间隔10ms
这是一个很简单的Linux、window下用C开发的socket通讯的demo,希望对初学者有帮助
HP-Socket_Linux为Linux端示例程序,示例Demo包含服务端(HPServer)、客户端(HPClient),示例Demo简单地演示了在Linux下如何使用HP-Socket通信模块库。另有HP-Socket_Windows端示例Demo,请移步下载。
蓝牙模块服务多种多样,这个小demo实现了linux下建立蓝牙服务端的demo,并带了一个客户端测试。 使用时,可通过两台设备,分别作为服务端可客户端,连接时填入对方地址即可开启测试。服务端建立后,客户端可通过...
linux下的一个简单的聊天demo,采用epoll接口,支持一对一聊天和消息群发
php环境 调用框架使用socks服务 主机是阿里云centos6.8环境(window目前没写文档)
opencv与socket在linux上的实现
简单实现了socket通信功能,适合socket初学者用来学习和理解socket,也是本人以前学习socket的时候入门的例子,希望对大家有用
本文件中包含两个文件TCP客户端client.c和TCP服务器server.c 文件用gcc即可完成编译 先运行服务器端,在运行客户端,可从客户端向服务器端...本程序适合linux下的Socket编程新手,有助更好的理解TCP协议和socket编程
linux下实现的摄像头实时视频数据传输demo,可根据自己的需求更改,可用cmake编译(需完整安装opencv),也可用g++编译(需部分编译pence库-lopencv_core -lopencv_video -lopencv_highgui -lopencv_imgproc):...
synapse delphi socket 封装了各种socket 适合win32和linux平台 有demo和源码lib 就这样了 还不够字数吗?
Linux进程间通讯的一种,本地Socket通讯,用C封装成非常简单的库,一共5个接口,支持阻塞延时,还有demo程序。
Linux tcp socket demo
linux下用C写的基于SSL 的TCP例子代码!
为了让使用者能方便快速地学习和使用 HP-Socket ,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能测试示例以及其它编程语言示例)。...
linux c实现简单的https获取百度一下("www.baidu.com"), 忽略证书。 linux下编译: g++ https.cpp -lssl -lcrypto
HP-Socket_Windows为Windows端示例程序,示例Demo包含服务端(TCPServer)、客户端(TCPClient),示例Demo简单地演示了在Windows下如何使用HP-Socket通信模块库。另有HP-Socket_Linux端示例Demo,请移步下载。
socket c++ code linux C++ 代码资源
国内优秀的开源开发框架HP-Socket的简单使用,这是一个最简单的pull模型,非常适合初学者。HP-Socket目前已经支持window和linux平台,并支持C,C++,易语言等多种语言。开发交流群:44636872。欢迎入群交流学习
Linux Socket下文件传输Demo