【Linux】中TCP_server的实现
来源:互联网 发布:北京匡恩网络拖欠工资 编辑:程序博客网 时间:2024/06/07 22:09
TCP 网络客户端侦听连接。
可使用 TcpClient 或 Socket 来连接 TcpListener。可使用 IPEndPoint、本地 IP 地址及端口号或者仅使用端口号,来创建 TcpListener。可以将本地 IP 地址指定为 Any,将本地端口号指定为 0(如果希望基础服务提供程序为您分配这些值)。如果您选择这样做,可在连接套接字后使用 LocalEndpoint 属性来标识已指定的信息。
可使用 TcpClient 或 Socket 来连接 TcpListener。可使用 IPEndPoint、本地 IP 地址及端口号或者仅使用端口号,来创建 TcpListener。可以将本地 IP 地址指定为 Any,将本地端口号指定为 0(如果希望基础服务提供程序为您分配这些值)。如果您选择这样做,可在连接套接字后使用 LocalEndpoint 属性来标识已指定的信息。
Start 方法用来开始侦听传入的连接请求。Start 将对传入连接进行排队,直至您调用 Stop 方法或它已经完成 MaxConnections 排队为止。可使用 AcceptSocket 或 AcceptTcpClient 从传入连接请求队列提取连接。这两种方法将阻止。如果要避免阻止,可首先使用 Pending 方法来确定队列中是否有可用的连接请求。
TCPClient:
TcpClient 为 TCP 网络服务提供客户端连接。
TcpClient 类提供了一些简单的方法,用于在同步阻塞模式下通过网络来连接、发送和接收流数据。
为使 TcpClient 连接并交换数据,使用 TCP ProtocolType 创建的 TcpListener 或 Socket 必须侦听是否有传入的连接请求。可以使用下面两种方法之一连接到该侦听器:
创建一个 TcpClient,并调用三个可用的 Connect 方法之一。
使用远程主机的主机名和端口号创建 TcpClient。此构造函数将自动尝试一个连接。
注意 如果要在同步阻塞模式下发送无连接数据报,请使用 UdpClient 类。
对继承者的说明: 要发送和接收数据,请使用 GetStream 方法来获取一个 NetworkStream。调用 NetworkStream 的 Write 和 Read 方法与远程主机之间发送和接收数据。使用 Close 方法释放与 TcpClient 关联的所有资源。
代码实现:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>void Usage(char *name){printf("Usage:%s[ipAddress][port]\n",name);}int StartUp(const char* _ip,int _port){int sock = socket(AF_INET,SOCK_STREAM,0);if(sock<0){perror("socket");exit(2);}struct sockaddr_in local;local.sin_family = AF_INET;local.sin_port= htons(_port);local.sin_addr.s_addr = inet_addr(_ip);if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0){perror("listen");exit(4);}return sock;}int main(int argc,char* argv[]){if(argc!=3){Usage(argv[0]);return 1;}int listen_sock=StartUp(argv[1],atoi(argv[2]));while(1){struct sockaddr_in client;socklen_t len=sizeof(client);char cli_ip[INET_ADDRSTRLEN]="";int new_sock=accept(listen_sock,(struct sockaddr *)&client,&len);if(new_sock<0){perror("accept");continue;}inet_ntop(AF_INET,&client.sin_addr,cli_ip,INET_ADDRSTRLEN);printf("get new client:ip->%s,port->%d\n",cli_ip,ntohs(ntohs(client.sin_port)));char buf[1024];while(1){ssize_t s=read(new_sock,buf,sizeof(buf)-1);if(s>0){buf[s]=0;printf("client# %s\n",buf);write(new_sock,buf,strlen(buf));}else if(s==0){printf("client 关闭\n");break;}else{perror("read");break;}}close(new_sock);}return 0;}
阅读全文
0 0
- 【Linux】中TCP_server的实现
- tcp_server的实现
- tcp_server的实现
- LINUX--TCP_server端的编写
- linux网络编程/tcp_server中server bind失败原因的调研
- TCP_server
- TCP_server
- TCP_server
- TCP_Server
- tcp_server
- tcp_server
- TCP_server
- tcp_server
- Linux套接字编程tcp_server
- Linux—TCP_server端编写多路转接之EPOLL
- 【网络】tcp_server
- 编写tcp_server
- Linux中PCI的实现
- Oracle_2
- leetcode237题解
- 遍历Map的四种方法
- [NP] 8.9
- 设计模式之观察者模式
- 【Linux】中TCP_server的实现
- 无线AP人员定位实现调研以及方案编写
- IReport常见问题整理
- python 程序打包成exe
- poj2337 Catenyms【欧拉图】
- OpenGL: gluLookAt函数的含义
- 1对多业务,数据库水平切分架构一次搞定
- iOS 10.0的网络问题:设置使用无线局域网与蜂窝移动的应用
- C++ const用法