socket简单例子
来源:互联网 发布:清空文件夹内容 linux 编辑:程序博客网 时间:2024/06/05 02:19
===server
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/sendfile.h>#include <sys/socket.h>#include <sys/types.h>#include <arpa/inet.h>#include <sys/ioctl.h>#include <unistd.h>#include <fcntl.h>static int AcceptSocket(char *psIp, int nPort){ if(psIp == NULL || nPort <= 0) return -1; long nIp = inet_addr(psIp); int nReuseSoAddr = 1; uint32_t nInterfaceIp = nIp; uint16_t nInterfacePort = nPort; struct in_addr tInterfaceInAddr; struct sockaddr_in tServerAddrIn; tInterfaceInAddr.s_addr = nInterfaceIp; int sockTcp = socket(AF_INET, SOCK_STREAM, 0); if (sockTcp < 0 ) { printf("scoket error\n"); return -1; } if ( setsockopt(sockTcp, SOL_SOCKET, SO_REUSEADDR, &nReuseSoAddr, sizeof(nReuseSoAddr)) != 0 ) { printf("Setsockopt error for service @ %s:%d", inet_ntoa(tInterfaceInAddr), nInterfacePort); return -1; } memset(&tServerAddrIn, 0x0, sizeof(tServerAddrIn)); tServerAddrIn.sin_family = AF_INET; tServerAddrIn.sin_addr.s_addr = nInterfaceIp; tServerAddrIn.sin_port = htons(nInterfacePort); if (bind(sockTcp, (struct sockaddr *)(&tServerAddrIn), sizeof(tServerAddrIn)) < 0 ) { printf("Bind tcp error for service @ %s:%d", inet_ntoa(tInterfaceInAddr), nInterfacePort); return -1; } if ( listen(sockTcp, 10) < 0 ) { printf("Cannot listen on service @ %s:%d", inet_ntoa(tInterfaceInAddr), nInterfacePort); return -1; } struct sockaddr_in tClientAddr; socklen_t nSockAddrInLen = sizeof(struct sockaddr_in); int sockClient = accept(sockTcp, (struct sockaddr *) (&tClientAddr), &nSockAddrInLen); if ( -1 == sockClient ) { printf("accept fail @ %s:%d", inet_ntoa(tInterfaceInAddr), nInterfacePort); return -1; } return sockClient;}int main(void){char *psIp = "127.0.0.1";int nPort = 11125;printf("server listen %s:%d\n", psIp, nPort);int sockSMTPClient = AcceptSocket(psIp, nPort);if(sockSMTPClient <= 0){printf("%s\n", "AcceptSocket fail");return -1;}int fd = open("/tmp/test.txt", 0);if(fd <= 0){printf("%s\r\n", "file open fail");return -1;}off_t off = 0;int res = sendfile(sockSMTPClient, fd, &off, 1000);printf("res=%d\r\n", res);return EXIT_SUCCESS;}
===client
#include <stdio.h>#include <stddef.h>#include <stdlib.h>#include <string.h>#include <openssl/ssl.h>#include <openssl/err.h>#include <sys/socket.h>#include <sys/types.h>#include <arpa/inet.h>#include <sys/ioctl.h>#include <unistd.h>#define niTimeOutInterval 5#define BUFFER_SIZE 1024static int SocketConnent(char *psIp, int nPort){if(psIp == NULL || nPort <= 0)return -1;long nIp = inet_addr(psIp);struct timeval tTimeOut;tTimeOut.tv_sec = 5;tTimeOut.tv_usec = 0;struct linger lin;lin.l_onoff=1;lin.l_linger=0;struct sockaddr_in inaddr;inaddr.sin_family = AF_INET;inaddr.sin_addr.s_addr = nIp;inaddr.sin_port = htons(nPort);int niSockFd = socket(AF_INET, SOCK_STREAM, 0);if(niSockFd == -1)return -1;setsockopt(niSockFd, SOL_SOCKET, SO_LINGER, &lin, sizeof(struct linger));int ulFlagBlock = 1;ioctl(niSockFd, FIONBIO, &ulFlagBlock);int rv = connect(niSockFd,(struct sockaddr *)&inaddr,sizeof(struct sockaddr_in));if(-1 == rv && errno == EINPROGRESS){fd_set fdSet;FD_ZERO(&fdSet);FD_SET(niSockFd, &fdSet);if( select(niSockFd + 1, NULL, &fdSet, NULL, &tTimeOut) > 0){int niError = 0;int niLenth = sizeof(int);getsockopt(niSockFd, SOL_SOCKET, SO_ERROR, &niError, (socklen_t *)&niLenth);if(niError != 0){close(niSockFd);return -1;}}}else if(rv != 0 ){close(niSockFd);return -1;}//rv == 0 connect suculFlagBlock=0;ioctl(niSockFd, FIONBIO, &ulFlagBlock);setsockopt(niSockFd,SOL_SOCKET,SO_SNDTIMEO,&tTimeOut,(socklen_t)sizeof(struct timeval));setsockopt(niSockFd,SOL_SOCKET,SO_RCVTIMEO,&tTimeOut,(socklen_t)sizeof(struct timeval));return niSockFd;}static int SocketRead(int nSocketFD, char *psBuffer, int nBufferLen){ int ret_read; while((ret_read = read(nSocketFD, psBuffer, nBufferLen - 1)) < 0 && errno == EINTR) ; if(-1 == ret_read) { return -1; } return ret_read;}int main(void){char *psIp = "127.0.0.1";int nPort = 11125;int sockSMTPClient = SocketConnent(psIp, nPort); if(sockSMTPClient <= 0) { printf("Error: %s %s:%d\n", "scoket connent fail", psIp, nPort); return 0; } printf("connect to %s:%d\n", psIp, nPort); char sBuffer[BUFFER_SIZE] = { 0 }; memset(sBuffer, 0, BUFFER_SIZE);int n = SocketRead(sockSMTPClient, sBuffer, BUFFER_SIZE);printf("client read %d bytes [%s]\n", n, sBuffer);return EXIT_SUCCESS;}
- socket简单例子
- socket通讯简单例子
- socket通信简单例子
- 简单socket 例子
- socket简单例子
- Java socket 简单例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- socket简单小例子
- Socket通信简单例子
- Perl Socket 简单例子
- 简单Socket例子
- Python + Socket 简单例子
- Socket简单入门例子
- Codeforces 193 Div 2
- YUV420图像格式
- hdu4185(二分图+最大匹配)
- UVA 10061 How many zeros and how many digits?
- 内存分配malloc函数注意事项。
- socket简单例子
- python VS java 摘自http://www.ej38.com/showinfo/Python-209370.html
- metasploit之hosts
- JDBC为什么要使用PreparedStatement而不是Statement
- C#读取excel中的数据
- HDU 3572 Task Schedule 建图+sap模板
- 第三章数程序设计初步--控制结构综合项目1-1百钱买百鸡
- 利用虚拟机安装swift
- 常见Android面试题及答案(详细整理)