⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sctpclnt.c

📁 檔案傳輸協定(FTP)為目前相當普遍與廣泛使用之網&#63799 應用。然而在傳統檔案傳輸協定之設計下
💻 C
字号:
/* *  sctpclnt.c * *  SCTP multi-stream client. * *  M. Tim Jones <mtj@mtjones.com> * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <netinet/sctp.h>#include <arpa/inet.h>#include "common.h"int main(){  int connSock, in, i, ret, flags;  struct sockaddr_in servaddr;  struct sctp_status status;  struct sctp_sndrcvinfo sndrcvinfo;  struct sctp_event_subscribe events;  struct sctp_initmsg initmsg;  char buffer[MAX_BUFFER+1];  /* Create an SCTP TCP-Style Socket */  connSock = socket( AF_INET, SOCK_STREAM, IPPROTO_SCTP );  /* Specify that a maximum of 5 streams will be available per socket */  memset( &initmsg, 0, sizeof(initmsg) );  initmsg.sinit_num_ostreams = 5;  initmsg.sinit_max_instreams = 5;  initmsg.sinit_max_attempts = 4;  ret = setsockopt( connSock, IPPROTO_SCTP, SCTP_INITMSG,                     &initmsg, sizeof(initmsg) );  /* Specify the peer endpoint to which we'll connect */  bzero( (void *)&servaddr, sizeof(servaddr) );  servaddr.sin_family = AF_INET;  servaddr.sin_port = htons(MY_PORT_NUM);  servaddr.sin_addr.s_addr = inet_addr( "127.0.0.1" );  /* Connect to the server */  ret = connect( connSock, (struct sockaddr *)&servaddr, sizeof(servaddr) );  /* Enable receipt of SCTP Snd/Rcv Data via sctp_recvmsg */  memset( (void *)&events, 0, sizeof(events) );  events.sctp_data_io_event = 1;  ret = setsockopt( connSock, SOL_SCTP, SCTP_EVENTS,                     (const void *)&events, sizeof(events) );  /* Read and emit the status of the Socket (optional step) */  in = sizeof(status);  ret = getsockopt( connSock, SOL_SCTP, SCTP_STATUS,                     (void *)&status, (socklen_t *)&in );  printf("assoc id  = %d\n", status.sstat_assoc_id );  printf("state     = %d\n", status.sstat_state );  printf("instrms   = %d\n", status.sstat_instrms );  printf("outstrms  = %d\n", status.sstat_outstrms );  /* Expect two messages from the peer */  for (i = 0 ; i < 2 ; i++) {    in = sctp_recvmsg( connSock, (void *)buffer, sizeof(buffer),                        (struct sockaddr *)NULL, 0, &sndrcvinfo, &flags );    if (in > 0) {      buffer[in] = 0;      if (sndrcvinfo.sinfo_stream == LOCALTIME_STREAM) {        printf("(Local) %s\n", buffer);      } else if (sndrcvinfo.sinfo_stream == GMT_STREAM) {        printf("(GMT  ) %s\n", buffer);      }    }  }  /* Close our socket and exit */  close(connSock);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -