最后更新:2022-04-29 05:57:20 手机定位技术交流文章
一. 维持一. 源代码
前言
TCP(传送控制议定书)
TCP打算遵守有利于多网络应用的等级协议结构。TCP用于提供初级计算机配对流程之间的可靠通信服务,这些流程与各种互联的计算机通信网络相连。《贸易协定》的前提是,可以在较低层次达成简单协议。提供不可靠的数据报告服务是可能的。 原则上,贸易点应当能够就广泛的通信系统开展工作,从硬线到集体交换或电路交换网络。
嵌套字
套接字是所有交流的基础它是公路通信的基本操作模块,支持TCP/IP议定书。袜子可被视为东道方之间进程双向沟通的终点。它既是单一东道主内部的编程接口,也是整个网络的编程接口。在通讯领域,有插座。通信领域旨在处理由通用线索提供的抽象想法,通过带子进行通信。袜子往往在同一领域与脚手架分享数据(数据交换可能发生跨域边界) 通信往往与同一领域的脚手架分享数据(数据交换也可能发生跨域边界)。然而,它与某种形式的解释方法有关。此域被使用互联网协议进行相互连接的过程所使用 。
系统调用
socket
原型:
int socket(int domain, int type,int protocol)
注: Socket 进行基本的网络连接准备。 它会返回关于成功的文件描述符, 1 关于失败的文件描述符, 以及检查是否错误理解问题的具体细节 。
bind
原型:
int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
然而,由于系统兼容性, 我们通常不使用这个信头文件, 而不使用另一个结构。 存在 sockaddr_ in 的定义 。
struct sockaddr_in{
unsigned short sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
}
我们大多使用互联网,所以..
通常是Af_INET, 但它会是唯一的事情 发生在我身上。
如果你愿意,你可以与主机交谈。
Sin_port是我们监听的端口号。 Sin_zero [8] 已填满 。
绑定本地端口连接到由 Socket 返回的文件描述。 成功以零返回, 失败则以套接字返回 。
listen
原型:
int listen(int sockfd,int backlog)
accept
原型:
int accept(int sockfd, struct sockaddr *addr,int *addrlen)
connect
原型:
int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)
2. 在Ubuntu执行程序。
编译
gcc -o server-while-tcp.out server-while-tcp.c
gcc -o client.out client.c
1
2
运行
./server-while-tcp.out
我不知道你在说什么 出局192,一号 ** 新窗户打开了
三. 将服务器转换为多线模式 。
功能
一. 多用途数据传输,即一个单一服务器与众多客户相对应,同时可以倾听多达10个客户的心声。
二. 客户向服务器发送连接请求,如果成功,公布连接细节。
三,一旦客户端向服务器提供数据,数据就打印在服务器上。
四. 服务器在将未来所有数据转换为大写后返回客户端 。
五,从服务器上返回的数据由客户打印。
源源服务器( 保留)
#include <sys/types.h> /* 网络编程所需头文件*/
#include <sys/socket.h> /* 网络编程所需头文件*/
#include <string.h>
#include <netinet/in.h> /* 包含类似inet_ntoa函数的头文件 */
#include <arpa/inet.h> /* 包含类似inet_ntoa函数的头文件 */
#include <unistd.h> /* 包含close函数、forck函数等系统调用函数的头文件 */
#include <stdio.h>
#include <signal.h> /* 包含signal函数的头文件 */
* 监听港口号 * /
# define FREDLOG10/ * 听 功能, 最同时的监听连接 */
/* socket
* bind
* listen
* accept
* send/recv
*/
int charup(unsigned char ch[1000]);
int main(int argc, char **argv)
{
int iSocketServer;
int iSocketClient;
Struct sockaddr_ in tSocketServerAddr; / * 存储服务器用户的结构、 端口号和其他信息 。 *
Struct sockaddr_ in tSocketClientAddr; / * 连接客户端的信息结构, 如 IP 地址* /
int iRet;
int iAddrLen;
int iRecvLen;
unsigned char ucRecvBuf[1000];
int iClientNum = -1;
信号(SIGCHLD,SIG_IGN);/ * 程序硬程序;否则,封闭客户端产生的服务器内置程序资源将不会被母程序回收,从而造成资源浪费 * /
i 套接字器 = 套接字器 (AF_ INET, SOCK_STREAM, 0) / * 初始化套接字* /
if (-1 == iSocketServer)
{
printf("Socket error!n");
return -1;
}
tSocketServerAddr.sin_family = AF_INET;
抱歉, tsocketServerAddr.sin_port = htons (SERVER_port); / * 将短型端口数据转换为适合网络传输的数据 */
对不起,托盘服务员Addr. 我不知道你在说什么,sin_addr.s_addr = InDID_ANY;/* 任何主机通讯都允许 */
我不确定你的意思是什么,memset (tSocketServerAddr.sin_zero,0,8;/ *内置为0, 保证与Sruct sockaddr的长度相同) /
iRet = bind(iSocketServer, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr)); /* 之前创建的socket文件描述符将被bind修饰 */
if (iRet == -1)
{
printf("Bind error!n");
return -1;
}
iRet = 听 (iSocketServer, 备份LOG); / * 听, 调用监听功能 * /
if (-1 == iRet)
{
printf("listen error!n");
return -1;
}
else
{
printf("Listening & Accepting...n");
}
while (1)
{
iAddrLen = sizeof(struct sockaddr);
/ * 使用接受功能等待客户连接;如果客户提供值,连接失败,返回 -1; * /
iSocketClient = accept(iSocketServer, (struct sockaddr *)&tSocketClientAddr, &iAddrLen);
if (-1 != iSocketClient)
{
iClientNum++;
* 允许许多客户连接,其中每个用户需要叉叉并创建子进程*/
printf("Get connnect from NO.%d : %sn", iClientNum, inet_ntoa(tSocketClientAddr.sin_addr));
如果 (!) Fork () / * 一旦执行 infork (), 就会打开一个相同的子进程 /
* 父进程叉()=0; 子进程叉()!=0;
* 分处理源代码*/
while (1)
{
* 接受并显示客户生成的数据 * /
iRecvLen = iRecvLen = recv(iSocketClient, ucRecvBuf, 999, 0);
if (iRecvLen <= 0)
{
关闭(iSocketCliet); / * 不断接收客户端信息* /
return -1;
}
else
{
* + 终点 * / ucRecvBuf [iRecvLen] = '0';
printf("Get Msg From client %d : %sn", iClientNum, ucRecvBuf);
}
字符集(ucRecvBuf); / * 字符串对字母翻译函数 */
iRecvLen = send(iSocketClient, ucRecvBuf, strlen(ucRecvBuf), 0);
if(iRecvLen <= 0)
{
close(iSocketClient);
return -1;
}
}
}
}
}
close(iSocketServer);
return 0;
}
/ 此函数定义字符串到资本化函数。
int charup(unsigned char ch[1000])
{
int i = 0;
while (ch[i] != ' ')
{
if(ch[i]>='a'&&ch[i]<='z')
c[i]=ch[i]-32; //如果你忘记了案件和案件之间的32个值差,请改用“a”-“A”。
i ++;
}
return 0;
}
客户(客户)来源
#include <sys/types.h> /* 网络编程所需头文件*/
#include <sys/socket.h> /* 网络编程所需头文件*/
#include <string.h>
#include <netinet/in.h> /* 包含类似inet_ntoa函数的头文件 */
#include <arpa/inet.h> /* 包含类似inet_ntoa函数的头文件 */
#include <unistd.h> /* 包含close函数、forck函数等系统调用函数的头文件 */
#include <stdio.h>
#include <signal.h>
# define ERVER_Pport 88// 相同港口号
*系统呼叫//口袋
* connect
* listen
* send/recv
*/
int main(int argc, char **argv)
{
int iSocketClient;
struct sockaddr_in tSocketServerAddr;
iRet int; // 返回值
unsigned char ucSendBuf[1000];
unsigned char ucRecvBuf[1000];
int iSendLen;
int iRecvLen;
if (argc != 2)
{
printf("Usage:n");
printf("%s <server_ip>n", argv[0]);
return -1;
}
iSocketClient = socket(AF_INET, SOCK_STREAM, 0);
tSocketServerAddr.sin_family = AF_INET;
tSocketServerAddr.sin_port = htons(SERVER_PORT); //host to net,short
我不懂你的意思,sin_addr.s_addr = InDID_ANY;/所有注册IP
if(0 == inet_aton(argv[1], &tSocketServerAddr.sin_addr))
{
printf("invalid server_ipn");
return -1;
}
memset(tSocketServerAddr.sin_zero, 0 , 8);
iRet = connect(iSocketClient, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr));
if (-1 == iRet)
{
printf("connect error!n");
printf("%s <server_ip>n", argv[0]);
return -1;
}
while (1)
{
if(fgets(ucSendBuf, 999, stdin))
{
iSendLen = send(iSocketClient, ucSendBuf, strlen(ucSendBuf), 0);
if(iSendLen <= 0)
{
close(iSocketClient);
return -1;
}
}
iRecvLen = iRecvLen = recv(iSocketClient, ucRecvBuf, 999, 0);
if (iRecvLen <= 0)
{
关闭 (iSocketCliet); / / 总是接收客户端消息
return -1;
}
else
{
+ 结尾点 ucRecvBuf [iRecvLen] = '0';
printf("Feedback:%sn", ucRecvBuf);
}
}
return 0;
}
在 Ubuntu 构建并运行程序 。
编译
gcc -o srv srv.c
gcc -o cli cli.c
运行
./srv
192. 1** / 一个新的窗口已经打开。
本文由 在线网速测试 整理编辑,转载请注明出处。