Rumah Operasi dan penyelenggaraan operasi dan penyelenggaraan linux Cara menggunakan soket linux untuk mencapai dialog antara pelayan dan pelanggan

Cara menggunakan soket linux untuk mencapai dialog antara pelayan dan pelanggan

May 29, 2023 pm 03:13 PM
linux pelayan

1.服务器端
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#define SERVPORT 3333
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 5

int main()
{
  struct sockaddr_in server_sockaddr,client_sockaddr;
  int sin_size,recvbytes;
  int sockfd,client_fd;
  char buf[MAXDATASIZE];
/*创建socket*/
  if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){
    perror("socket");
    exit(1);
  }
  printf("socket success!,sockfd=%d\n",sockfd);
/*设置服务器sockaddr_in结构*/
  server_sockaddr.sin_family=AF_INET;
  server_sockaddr.sin_port=htons(SERVPORT);
  server_sockaddr.sin_addr.s_addr=INADDR_ANY;
  bzero(&(server_sockaddr.sin_zero),8);
/*绑定socket和端口*/
  if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){
    perror("bind");
    exit(1);
  }
  printf("bind success!\n");
/*监听客户端请求*/
  if(listen(sockfd,BACKLOG)==-1){
    perror("listen");
    exit(1);
  }
  printf("listening....\n");
/*接受客户端请求*/
  if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){
    perror("accept");
    exit(1);
  }
/*接收客户端信息*/
  if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){
    perror("recv");
    exit(1);
  }
  printf("received a connection :%s\n",buf);
/*关闭socket*/
  close(sockfd);
}
2.客户端
#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 SERVPORT 3333
#define MAXDATASIZE 100
main(int argc,char *argv[]){
  int sockfd,sendbytes;
  char buf[MAXDATASIZE];
  struct hostent *host;
  struct sockaddr_in serv_addr;
/*argc<2,表示没有输入主机名,主机句是IP地址形式,如“192.168.1.1”*/
  if(argc < 2){
    fprintf(stderr,"Please enter the server's hostname!\n");
    exit(1);
  }
/*获取主机名,地址解析函数*/
  if((host=gethostbyname(argv[1]))==NULL){
    perror("gethostbyname");
    exit(1);
  }
/*创建socket*/
  if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
    perror("socket");
    exit(1);
  }
/*设置serv_addr结构参数*/
  serv_addr.sin_family=AF_INET;
  serv_addr.sin_port=htons(SERVPORT);
  serv_addr.sin_addr=*((struct in_addr *)host->h_addr);
  bzero(&(serv_addr.sin_zero),8);
/*向服务器请求连接,serv_addr是服务器端地址*/
  if(connect(sockfd,(struct sockaddr *)&serv_addr,\
    sizeof(struct sockaddr))==-1){
    perror("connect");
    exit(1);
  }
/*发送消息给服务器,此时可以在服务器端看到"hello"字样*/
  if((sendbytes=send(sockfd,"hello",5,0))==-1){
    perror("send");
    exit(1);
  }
/*关闭连接*/
  close(sockfd);
}
Salin selepas log masuk

Langkah kompilasi

#gcc server.c -o server
#./server                       //此时服务器端在监听
#gcc client.c -o client
#./client 172.31.100.236        //客户端向服务器端发送“hello",服务器端监听终止
Salin selepas log masuk

Atas ialah kandungan terperinci Cara menggunakan soket linux untuk mencapai dialog antara pelayan dan pelanggan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Android TV Box mendapat peningkatan Ubuntu 24.04 tidak rasmi Android TV Box mendapat peningkatan Ubuntu 24.04 tidak rasmi Sep 05, 2024 am 06:33 AM

Android TV Box mendapat peningkatan Ubuntu 24.04 tidak rasmi

DeepSeek Web Versi Pintu Masuk Laman Web Rasmi DeepSeek DeepSeek Web Versi Pintu Masuk Laman Web Rasmi DeepSeek Feb 19, 2025 pm 04:54 PM

DeepSeek Web Versi Pintu Masuk Laman Web Rasmi DeepSeek

Cara Memasang DeepSeek Cara Memasang DeepSeek Feb 19, 2025 pm 05:48 PM

Cara Memasang DeepSeek

Alamat muat turun aplikasi dompet BitPie Bitpie Alamat muat turun aplikasi dompet BitPie Bitpie Sep 10, 2024 pm 12:10 PM

Alamat muat turun aplikasi dompet BitPie Bitpie

Pemasangan Laman Web Rasmi Bitget (Panduan Pemula 2025) Pemasangan Laman Web Rasmi Bitget (Panduan Pemula 2025) Feb 21, 2025 pm 08:42 PM

Pemasangan Laman Web Rasmi Bitget (Panduan Pemula 2025)

Penjelasan terperinci: Perintah parameter pertimbangan pembolehubah skrip Shell Penjelasan terperinci: Perintah parameter pertimbangan pembolehubah skrip Shell Sep 02, 2024 pm 03:25 PM

Penjelasan terperinci: Perintah parameter pertimbangan pembolehubah skrip Shell

Pemasangan penyusunan kod sumber Zabbix 3.4 Pemasangan penyusunan kod sumber Zabbix 3.4 Sep 04, 2024 am 07:32 AM

Pemasangan penyusunan kod sumber Zabbix 3.4

Pakej pemasangan OUYI OKX disertakan secara langsung Pakej pemasangan OUYI OKX disertakan secara langsung Feb 21, 2025 pm 08:00 PM

Pakej pemasangan OUYI OKX disertakan secara langsung

See all articles