Linux Socket笔记

C Socket学习样例:使用代码记录基础的执行流程

源代码

客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <zconf.h>

int main() {
  //创建套接字
  int sock=socket(AF_INET,SOCK_STREAM,0);

  //向特定的服务器发起请求
  struct sockaddr_in serv_addr;
  memset(&serv_addr,0,sizeof(serv_addr));//用0填充每个字节
  serv_addr.sin_family=AF_INET; //使用ipv4
  serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
  serv_addr.sin_port=htons(1234); //端口

// 连接服务端
  connect(sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr));

  //读取服务器传回的数据
  char buffer[40];
  read(sock,buffer,sizeof(buffer)-1);

  printf("Message from server:%s\n",buffer);

  //关闭套接字
  close(sock);

  return 0;
}

服务端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <zconf.h>

int main() {
  //创建
  int serv_sock =socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  //将套接字绑定ip,端口
  struct sockaddr_in serv_addr;
  memset(&serv_addr,0,sizeof(serv_addr)); //填充每个字节用0
  serv_addr.sin_family=AF_INET; //使用ipv4
  serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); //本机(即服务器)IP地址
  serv_addr.sin_port=htons(1234); //使用的端口
  bind(serv_sock,(struct sockaddr*)&serv_addr, sizeof(serv_addr));

  //开始监听
  listen(serv_sock,20);

  //接收客户端请求
  struct sockaddr_in clnt_addr;
  socklen_t clnt_addr_size =sizeof(clnt_addr);
  int clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size);

  //向客户端发送数据
  char str[]="hello world";
  write(clnt_sock,str,sizeof(str));

  //关闭套接字
  close(clnt_sock);
  close(serv_sock);
  return 0;
}