Linux socket 测试

Client : mini2440

Server : PC Ubuntu

网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。socket也有一个类似于打开文件的函数:socket(),调用socket(),该函数返回一个整型的socket的描述符,随后的连接建立、数据传输等操作也都是通过该socket实现。此次测试用mini2440做Client,PC机做Server,同时连接上局域网。ping通之后,在mini2440上运行client.c,PC上运行server.c。

client.c :

#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>

int main()
{
	int cfd;
	int recbytes;
	int sin_size;
	char buffer[1024]={0};
	struct sockaddr_in s_add,c_add;
	unsigned short portnum=0x8888;  //port number

	cfd = socket(AF_INET, SOCK_STREAM, 0);
	if(-1 == cfd)
	{
	    printf("socket fail ! \r\n");
	    return -1;
	}

	bzero(&s_add,sizeof(struct sockaddr_in));
	s_add.sin_family=AF_INET;
	s_add.sin_addr.s_addr= inet_addr("172.20.21.247");   //IP of your PC
	s_add.sin_port=htons(portnum);
	printf("s_addr = %#x ,port : %#x\r\n",s_add.sin_addr.s_addr,s_add.sin_port);

	if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
	{
	    printf("connect fail !\r\n");
	    return -1;
	}
	printf("connect ok !\r\n");

	if(-1 == (recbytes = read(cfd,buffer,1024)))
	{
	    printf("read data fail !\r\n");
	    return -1;
	}
	buffer[recbytes]='\0';
	printf("%s\r\n",buffer);
	getchar();
	close(cfd);
	return 0;
}

server.c :

#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>

int main()
{
	int sfp,nfp;
	struct sockaddr_in s_add,c_add;
	int sin_size;
	unsigned short portnum=0x8888;     //port number
	sfp = socket(AF_INET, SOCK_STREAM, 0);

	if(-1 == sfp)
	{
	    printf("socket fail ! \r\n");
	    return -1;
	}

	printf("socket ok !\r\n");
	bzero(&s_add,sizeof(struct sockaddr_in));
	s_add.sin_family=AF_INET;
	s_add.sin_addr.s_addr=htonl(INADDR_ANY);
	s_add.sin_port=htons(portnum);

	if(-1 == bind(sfp,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
	{
	    printf("bind fail !\r\n");
	    return -1;
	}

	if(-1 == listen(sfp,5))
	{
	    printf("listen fail !\r\n");
	    return -1;
	}

	while(1)
	{
		sin_size = sizeof(struct sockaddr_in);
		nfp = accept(sfp, (struct sockaddr *)(&c_add), &sin_size);
		if(-1 == nfp)
		{
		    printf("accept fail !\r\n");
		    return -1;
		}
		printf("waiting for %#x : %#x\r\n",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));
		if(-1 == write(nfp,"hello,socket\r\n",32))
		{
		    printf("write fail!\r\n");
		    return -1;
		}
		printf("write ok!\r\n");
		close(nfp);
	}
	close(sfp);
	return 0;
}

编译client.c:  arm-linux-gcc -o client client.c 生成client可执行文件

编译server.c:  gcc -o server server.c 生成server可执行文件

拷贝client到mini2440

PC机运行server:

[email protected]:~# ./server

socket ok !

mini2440运行client:

[root@FriendlyARM /sdcard] # ./client

s_addr = 0xf71514ac ,port : 0x8888

connect ok !

hello,socket

客户端已经收到了服务端发出的"hello,socket"的字符串

时间: 2024-08-03 22:00:48

Linux socket 测试的相关文章

windows 与 Linux SOCKET通讯

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 windows client 端口 // Def_win_client_socket_test.cpp :

Linux Socket基础介绍

Linux Socket函数库是从Berkeley大学开发的BSD UNIX系统中移植过来的.BSD Socket接口是众多Unix系统中被广泛支持的TCP/IP通信接口,Linux下的Socket程序设计,除了微小的差别之外,也适用于大多数其它Unix系统. Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符. Socket的使用和文件

Kail Linux渗透测试教程之在Metasploit中扫描

Kail Linux渗透测试教程之在Metasploit中扫描 在Metasploit中扫描 在Metasploit中,附带了大量的内置扫描器.使用这些扫描器可以搜索并获得来自一台计算机或一个完整网络的服务信息.本节将介绍使用Metasploit中的辅助模块实现扫描. [实例4-4]在Metasploit中,扫描目标主机.具体操作步骤如下所示: (1)启动MSF终端.执行命令如下所示: root@kali :~# msfconsole msf> (2)搜索所有可用的扫描模块.执行命令如下所示:

Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap

Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap 网络扫描和嗅探工具--Nmap Nmap也就网络映射器(Network Mapper),是一个免费开放的网络扫描和嗅探工具.该工具可以扫描主机是否在线.所开放的端口号.提供的网络服务及操作系统类型等.本节将介绍Nmap工具的使用.在使用Nmap工具之前,首先需要了解它的几种扫描类型.Nmap主要的扫描类型如表4-1所示. 表4-1  Nmap扫描类型 [实例4-1]使用nmap工具扫描目标主机192.168.6.105的端口号.执行命

Kail Linux渗透测试教程之Recon-NG框架

Kail Linux渗透测试教程之Recon-NG框架 信息收集 信息收集是网络攻击最重要的阶段之一.要想进行渗透攻击,就需要收集目标的各类信息.收集到的信息越多,攻击成功的概率也就越大.本章将介绍信息收集的相关工具. Recon-NG框架 Recon-NG是由python编写的一个开源的Web侦查(信息收集)框架.Recon-ng框架是一个强大的工具,使用它可以自动的收集信息和网络侦查.下面将介绍使用Recon-NG侦查工具. 启动Recon-NG框架,执行命令如下所示: root@kali

Linux Socket - 基本socket链接

0x0000 Linux Socket 函数 bind listen connect accept send recv read write 0x0001 Server绑不上ip 报错位置在bind函数 [[email protected] 01]# ./server 191.168.80.151 1588 191.168.80.151 : 1588 Bind: Cannot assign requested address port已被占用 报错位置在bind函数 [[email protec

OpenFastPath(2):原生态Linux Socket应用如何移植到OpenFastPath上?

版本信息: ODP(Open Data Plane): 1.19.0.2 OFP(Open Fast Path): 3.0.0 1.存在的问题 OpenFastPath作为一个开源的用户态TCP/IP协议栈,其对用户提供的Socket API,无论是宏定义.数据结构还是函数,均以OFP_开头.如下图所示: 1 int ofp_socket(int, int, int); 2 int ofp_socket_vrf(int, int, int, int); 3 int ofp_accept(int,

Java Socket编程以及与Linux Socket API关系

Socket 编程(基于Linux) Socket独立于具体协议的网络编程接口,在ISO模型中,主要位于会话层和传输层之间:在通用的计算机网络五层模型中,主要位于应用层和传输层之间. Linux Socket 基本上就是BSD Socket 需要使用的头文件 数据类型:#include <sys/types.h> 函数定义:#include <sys/socket.h> Socket类型 套接字是一种通信机制,通信两方的一种约定,用套接字中的相关函数来完成通信过程.根据传输内容分为

Android Jni层 创建 linux socket 出错问题解决

问题: 想在Jni层创建 udp socket 与服务端通信,但是没有成功,最后发现竟然是创建socket失败(代码如下) // create socket g_sd = socket(AF_INET, SOCK_DGRAM, 0); if (-1 == g_sd) { perror("socket()"); goto err_socket; } 解决办法: 在 AndroidManifest.xml 文件中,添加访问网络的权限: <uses-permission android