Socket In C

来源:互联网 发布:php 偏移量 编辑:程序博客网 时间:2024/05/23 19:40

 

Socket In C

 (2010-08-26 14:00:56)[编辑][删除]

标签:

c

socket

it

分类:C语言  摘自blog.sina.com.cn/rekken

Socket In C


环境

Socket编程需要linux系统


最终实现

1,远程控制 2,远程主机控制中控 3,中控负责转发命令和数据 4,采集器负责采集数据 具体: 1,采集器:具有接受命令,判断执行采集或者停止采集,并把采集到的数据发送到中控 2,中控:负责接受远程主机的数据,无条件的转发给采集器,并且能够将各个采集器发送到中控的数据转发的到远程主机 3,远程主机:复杂发送采集和停止采集命令。接收中控发送过来的采集数据,并做出分析(分析可能是后续步骤)


socket通信原理

什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求
服务器端的步骤如下。 (1)建立服务器端的Socket,开始侦听整个网络中的连接请求。 (2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。 (3)当完成通信后,服务器关闭与客户端的Socket连接。 客户端的步骤如下。 (1)建立客户端的Socket,确定要连接的服务器的主机名和端口。 (2)发送连接请求到服务器,并等待服务器的回馈信息。 (3)连接成功后,与服务器进行数据的交互。 (4)数据处理完毕后,关闭自身的Socket连接


建立连接

基本的TCP客户端的连接包括四个步骤: 1,利用socket(),建立一个TCP socket 2,利用connect()向主机(server)建立连接 3,使用send()和recv(),和主机(server)进行通信 4,关闭连接使用close()

多线程的拥塞问题

socket通过pthread_create(&id,NULL,(void *) thread,NULL)来创建新的线程,之前要#include <pthread.h> 在POSIX线程API中提供了一个pthread_cleanup_push()/pthread_cleanup_pop()函数对用于自动释放资源--从pthread_cleanup_push()的 调用点到pthread_cleanup_pop()之间的程序段中的终止动作(包括调用pthread_exit()和取消点终止)都将执行pthread_cleanup_push() 所指定的清理函数

发送命令

通过socket套接字,连接指定ip主机的指定端口,发送指定的内容

struct CmdCustom{ unsigned char iCode1; unsigned char iCode2; //unsigned char nodeID[4];unsigned int nodeId; unsigned short iCommand; unsigned short iLength; unsigned short crc;unsigned char buf[40]};

通过次结构体,将带发送的内容进行封装,然后通过发送(data_send(clientfd,(char *)&cmd_mes,sizeof(struct CmdCustom))和接收(data_recv(clientfd,response))来通信 其中的data_send()和data_recv()为自定义函数,函数内部利用send()和recv()两个函数进行真正的数据发送和接收。 具体代码如下

int data_send(int sockfd,char *data,int length) { int sendbytes; int total=0;while(total<length){ if((sendbytes=send(sockfd,data+total,length-total,MSG_NOSIGNAL))==-1){errorlogs("send")//close(sockfd); return -1} total+=sendbytes; #ifdef DEBUG char s[30]; logs("***********************************/n");//logs():自定义函数,作用基本同printf();sprintf(s,"size %d data already send!/n",sendbytes); logs(s); logs("***********************************/n")#endif } //memset(data,0,length); return total;}


Send File In C Socket

通过SOCKET发送文件可以按如下步骤进行操作:

1. Open socket connection to remote server. 2. Open file on local system. 3. Read x bytes from file on local system. 4. Write x bytes to socket. 5. Repeat 3 & 4 until all bytes have been read from file and transmitted to remote system. 6. Close file. 7. Close socket.