linux之TCP/IP–簡單一發送一接收(1)

來源:互聯網
上載者:User

現在是網路社會,學linux不會tcp/ip,心裡老感覺空空的。所以也要認真好好學習這個東東了。

實驗目的:實現用戶端發送,伺服器接收

===========server===================

#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define PORT 3333int main(int argc, char *argv[]){int sockfd;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int sin_size;char buf[100];sockfd = socket(AF_INET,SOCK_STREAM,0);//建立通訊端if(sockfd == -1){fprintf(stderr,"Socket error:%s\n",strerror(errno));exit(1);}bzero(&server_addr,sizeof(struct sockaddr_in));//置位元組字串s的前n個位元組為零且包括‘\0’server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//任何ip都可連上,我是開放滴server_addr.sin_port = htons(PORT);int on=1;setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));//這個作用,你可以去掉再試試if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr_in))==-1)//綁定{fprintf(stderr,"Bind error:%s\n",strerror(errno));exit(1);}if(listen(sockfd,20)==-1)//監聽,還20個{                fprintf(stderr,"listen error:%s\n",strerror(errno));                exit(1);}int new_fd;pid_t child;int r_size;int w_size;while(1){printf("wait!!!!!\n");memset(buf,0,100);sin_size = sizeof(struct sockaddr_in);if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) //接收,看是否有人連上{                fprintf(stderr,"Accept error:%s\n",strerror(errno));                exit(1);}fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));if((r_size=read(new_fd,buf,100))==-1) //讀取資料 {fprintf(stderr,"Read error:%s\n",strerror(errno));      exit(1); } printf("Received information%d::%s\n",r_size,buf);   }close(sockfd);exit(0);}

===========client====================

#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define PORT 3333int main(int argc, char *argv[]){int sockfd;char buf[100];struct sockaddr_in server_addr;struct hostent *host;sockfd = socket(AF_INET,SOCK_STREAM,0);//建立通訊端if(sockfd==-1){fprintf(stderr,"Socket error:%s\n",strerror(errno));exit(1);}bzero(&server_addr,sizeof(server_addr));//置位元組字串s的前n個位元組為零且包括‘\0’server_addr.sin_family=AF_INET;server_addr.sin_port=htons(PORT);server_addr.sin_addr.s_addr=inet_addr("192.168.1.155");//ip是要已連線的服務器ipint con_flag;con_flag=connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));//串連if(con_flag==-1){fprintf(stderr,"Connect Error:%s\a\n",strerror(errno)); exit(1); }printf("Please input some words:");fgets(buf,100,stdin);if(write(sockfd,buf,sizeof(buf))<0)//往得到的通訊端介面裡寫資料{fprintf(stderr,"write Error:%s\a\n",strerror(errno));        exit(1);}close(sockfd);//請關閉        exit(0);}

實驗結果如下:

root@wyz-vlinux:~/test/sc# ./tcp_server
Server get connection from 192.168.1.155
Server received hello mama

Server get connection from 192.168.1.155
Server received i love linux

root@wyz-vlinux:~/test# ./tcp_client
Please input some words:hello mama
root@wyz-vlinux:~/test# ./tcp_client
Please input some words:i love linux
root@wyz-vlinux:~/test#

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.