转自:https://blog.csdn.net/cabing2005/article/details/53068880
详细函数以及参数解释请看原链接。
windows下的tcp/udp参考:http://www.cnblogs.com/lyggqm/p/6558002.html
TCP SERVER:
// // main.cpp // linux_socket_api // // Created by bikang on 16/11/2. // Copyright (c) 2016年 bikang. All rights reserved. // #include <iostream> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <assert.h> #include <stdio.h> #include <string.h> //using namespace std; #define BUFFER_SIZE 1024 void tsocket(int argc, const char * argv[]); int main(int argc, const char * argv[]) { tsocket(argc,argv); return 0; } void tsocket(int argc, const char * argv[]){ if(argc < 3){ exit(-1); } const char* ip = argv[1]; int port = atoi(argv[2]); int backlog = atoi(argv[3]); std::cout << "ip=" << ip << " port="<<port << " backlog=" << backlog << std::endl; int fd; int check_ret; fd = socket(PF_INET,SOCK_STREAM , 0); assert(fd >= 0); struct sockaddr_in address; bzero(&address,sizeof(address)); //转换成网络地址 address.sin_port = htons(port); address.sin_family = AF_INET; //地址转换 inet_pton(AF_INET, ip, &address.sin_addr); //设置socket buffer大小 int recvbuf = 4096; int len = sizeof( recvbuf ); setsockopt( fd, SOL_SOCKET, SO_RCVBUF, &recvbuf, sizeof( recvbuf ) ); getsockopt( fd, SOL_SOCKET, SO_RCVBUF, &recvbuf, ( socklen_t* )&len ); printf( "the receive buffer size after settting is %d ", recvbuf ); //绑定ip和端口 check_ret = bind(fd,(struct sockaddr*)&address,sizeof(address)); assert(check_ret >= 0); //创建监听队列,用来存放待处理的客户连接 check_ret = listen(fd, backlog); assert(check_ret >= 0); struct sockaddr_in addressClient; socklen_t clientLen = sizeof(addressClient); //接受连接,阻塞函数 int connfd = accept(fd, (struct sockaddr*)&addressClient, &clientLen); if(connfd < 0){ std::cout << "accept error"; }else{ //打印客户端信息 char showData[INET_ADDRSTRLEN]; std::cout <<inet_ntop(AF_INET,&addressClient.sin_addr,showData,INET_ADDRSTRLEN)<<":" <<ntohs(addressClient.sin_port)<<std::endl; //接受数据 const int BUF_LEN = 1024; char sockBuf[BUF_LEN]; size_t ret; memset(sockBuf, '