资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言网络传输的函数 c语言实现传递函数

c语言中关于socket函数的例子

函数说明:socket()用来建立一个新的socket, 也就是向系统注册, 通知系统建立一通信端口. 参数domain 指定使用何种的地址类型, 完整的定义在/usr/include/bits/socket.h 内, 底下是常见的协议:

创新互联建站主要从事网站设计制作、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务西固,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

PF_UNIX/PF_LOCAL/AF_UNIX/AF_LOCAL UNIX 进程通信协议

PF_INET?AF_INET Ipv4 网络协议

PF_INET6/AF_INET6 Ipv6 网络协议

PF_IPX/AF_IPX IPX-Novell 协议

PF_NETLINK/AF_NETLINK 核心用户接口装置

PF_X25/AF_X25 ITU-T X. 25/ISO-8208 协议

PF_AX25/AF_AX25 业余无线AX. 25 协议

PF_ATMPVC/AF_ATMPVC 存取原始 ATM PVCs

PF_APPLETALK/AF_APPLETALK appletalk (DDP)协议

PF_PACKET/AF_PACKET 初级封包接口

参数 type 有下列几种数值:

1、SOCK_STREAM 提供双向连续且可信赖的数据流, 即TCP. 支持 OOB 机制, 在所有数据传送前必须使用connect()来建立连线状态.

2、SOCK_DGRAM 使用不连续不可信赖的数据包连接

3、SOCK_SEQPACKET 提供连续可信赖的数据包连接

4、SOCK_RAW 提供原始网络协议存取

5、SOCK_RDM 提供可信赖的数据包连接

6、SOCK_PACKET 提供和网络驱动程序直接通信. protocol 用来指定socket 所使用的传输协议编号, 通常此参考不用管它, 设为0 即可.

返回值:成功则返回socket 处理代码, 失败返回-1.

错误代码:

1、EPROTONOSUPPORT 参数domain 指定的类型不支持参数type 或protocol 指定的协议

2、ENFILE 核心内存不足, 无法建立新的socket 结构

3、EMFILE 进程文件表溢出, 无法再建立新的socket

4、EACCESS 权限不足, 无法建立type 或protocol 指定的协议

5、ENOBUFS/ENOMEM 内存不足

6、EINVAL 参数domain/type/protocol 不合法

帮忙看下C语言的问题啊,我想实现的功能是网络传输数据,从客户端传到服务器,为什么传过去的数值都是0啊

char *itoa(int x,char*string1,int radix);

char *itoa(int y,char*string2,int radix);

这两行你写成声明了。应该用

itoa(x, string1, 10);

itoa(y, string2, 10);

C语言的三种函数传递

在函数调用的时候,只是把原本参数的值赋值给了函数中的形式参数。在exchange函数中操作的是形参,没有对原本函数做出操作,所以输出结果是 x = 4,y = 2 a = 2,b = 4。

这次在函数调用的时候是吧a,b的地址赋值给了px,py,所以交换的是真正的a,b变量此时输出的结果是*px = 4,*py = 2

a = 4,b =2 。

这个取地址的引用传递虽然看起来像值传递,然而确实真正的改变原来常量的值,就像下棋一样操作的不是棋子,而是棋手。

如何用C语言实现向某个IP发送数据包(例如4个浮点数)?

使用socket()编程即可。

1、网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

2、下面用Socket实现一个windows下的c语言socket通信例子,这里客户端传递一个字符串,服务器端进行接收。

【服务器端】

#include "stdafx.h"

#include stdio.h

#include winsock2.h

#include winsock2.h

#define SERVER_PORT 5208 //侦听端口

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int ret, nLeft, length;

SOCKET sListen, sServer; //侦听套接字,连接套接字

struct sockaddr_in saServer, saClient; //地址信息

char *ptr;//用于遍历信息的指针

//WinSock初始化

wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本

ret=WSAStartup(wVersionRequested, wsaData);

if(ret!=0)

{

printf("WSAStartup() failed!\n");

return;

}

//创建Socket,使用TCP协议

sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (sListen == INVALID_SOCKET)

{

WSACleanup();

printf("socket() faild!\n");

return;

}

//构建本地地址信息

saServer.sin_family = AF_INET; //地址家族

saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序

saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址

//绑定

ret = bind(sListen, (struct sockaddr *)saServer, sizeof(saServer));

if (ret == SOCKET_ERROR)

{

printf("bind() faild! code:%d\n", WSAGetLastError());

closesocket(sListen); //关闭套接字

WSACleanup();

return;

}

//侦听连接请求

ret = listen(sListen, 5);

if (ret == SOCKET_ERROR)

{

printf("listen() faild! code:%d\n", WSAGetLastError());

closesocket(sListen); //关闭套接字

return;

}

printf("Waiting for client connecting!\n");

printf("Tips: Ctrl+c to quit!\n");

//阻塞等待接受客户端连接

while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。

{

length = sizeof(saClient);

sServer = accept(sListen, (struct sockaddr *)saClient, length);

if (sServer == INVALID_SOCKET)

{

printf("accept() faild! code:%d\n", WSAGetLastError());

closesocket(sListen); //关闭套接字

WSACleanup();

return;

}

char receiveMessage[5000];

nLeft = sizeof(receiveMessage);

ptr = (char *)receiveMessage;

while(nLeft0)

{

//接收数据

ret = recv()(sServer, ptr, 5000, 0);

if (ret == SOCKET_ERROR)

{

printf("recv() failed!\n");

return;

}

if (ret == 0) //客户端已经关闭连接

{

printf("Client has closed the connection\n");

break;

}

nLeft -= ret;

ptr += ret;

}

printf("receive message:%s\n", receiveMessage);//打印我们接收到的消息。

}

// closesocket(sListen);

// closesocket(sServer);

// WSACleanup();

}

【客户端】

#include "stdafx.h"

#include stdio.h

#include stdlib.h

#include winsock2.h

#define SERVER_PORT 5208 //侦听端口

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int ret;

SOCKET sClient; //连接套接字

struct sockaddr_in saServer; //地址信息

char *ptr;

BOOL fSuccess = TRUE;

//WinSock初始化

wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本

ret = WSAStartup(wVersionRequested, wsaData);

if(ret!=0)

{

printf("WSAStartup() failed!\n");

return;

}

//确认WinSock DLL支持版本2.2

if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)

{

WSACleanup();

printf("Invalid WinSock version!\n");

return;

}

//创建Socket,使用TCP协议

sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (sClient == INVALID_SOCKET)

{

WSACleanup();

printf("socket() failed!\n");

return;

}

//构建服务器地址信息

saServer.sin_family = AF_INET; //地址家族

saServer.sin_port = htons(SERVER_PORT); //注意转化为网络节序

saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.127");

//连接服务器

ret = connect(sClient, (struct sockaddr *)saServer, sizeof(saServer));

if (ret == SOCKET_ERROR)

{

printf("connect() failed!\n");

closesocket(sClient); //关闭套接字

WSACleanup();

return;

}

char sendMessage[]="hello this is client message!";

ret = send (sClient, (char *)sendMessage, sizeof(sendMessage), 0);

if (ret == SOCKET_ERROR)

{

printf("send() failed!\n");

}

else

printf("client info has been sent!");

closesocket(sClient); //关闭套接字

WSACleanup();

}


分享标题:c语言网络传输的函数 c语言实现传递函数
文章URL:http://cdkjz.cn/article/doggcpg.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220