(2)网络编程之绑定socket

来源:互联网 发布:阿里云负载均衡方案 编辑:程序博客网 时间:2024/05/17 22:58

Structure

/* Internet address. */struct in_addr {__u32s_addr;};/* Structure describing an Internet (IP) socket address. */#define __SOCK_SIZE__16/* sizeof(struct sockaddr)*/struct sockaddr_in {  sa_family_tsin_family;/* Address family*/  unsigned short intsin_port;/* Port number*/  struct in_addrsin_addr;/* Internet address*/  /* Pad to size of `struct sockaddr'. */  unsigned char__pad[__SOCK_SIZE__ - sizeof(short int) -sizeof(unsigned short int) - sizeof(struct in_addr)];};

Src

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define RECV_BUF_SIZE 1024#define CMD_PARAMS5int main(int argc, char *argv[]){int sockfd = 0;int ret = 0;char recv_buf[RECV_BUF_SIZE];struct sockaddr_in server_addr, client_addr;memset(recv_buf, 0, sizeof(recv_buf));memset(&server_addr, 0, sizeof(struct sockaddr_in));memset(&client_addr, 0, sizeof(struct sockaddr_in));if (argc != CMD_PARAMS){fprintf(stderr, "Usage: %s server port client port\n", argv[0]);return -1;}sockfd = socket(AF_INET, SOCK_STREAM, 0);  if (sockfd < 0)  {  fprintf(stderr, "Create socket fail\n");  return -1;  }server_addr.sin_family = AF_INET;server_addr.sin_port = htons(atoi(argv[2]));ret = inet_aton(argv[1], (struct in_addr *)(&server_addr.sin_addr.s_addr));if (0 == ret){fprintf(stderr, "Server address %s error\n", argv[1]);return -1;}client_addr.sin_family = AF_INET;client_addr.sin_port = htons(atoi(argv[4]));ret = inet_aton(argv[3], (struct in_addr *)(&client_addr.sin_addr.s_addr));if (0 == ret){fprintf(stderr, "Client address %s error\n", argv[1]);return -1;}ret = bind(sockfd, (struct sockaddr *)(&client_addr), sizeof(struct sockaddr));if (-1 == ret){fprintf(stderr, "Bind client socket and address fail, %s\n", argv[3]);return -1;}ret = connect(sockfd, (struct sockaddr *)(&server_addr), sizeof(server_addr));if (ret != 0){fprintf(stderr, "Connect server %s:%d fail\n", argv[1], atoi(argv[2]));return -1; }recv(sockfd, recv_buf, RECV_BUF_SIZE, 0);printf("%s", recv_buf);close(sockfd);return 0;}

Makefile

target := bind_expobj = $(patsubst *.c, *.o, $(wildcard *.c))$(target): $(obj)        gcc -Wall -o $(target) $(obj) clean:        rm -r $(target) *.o

Do

root@ubuntuServer:~/test/networkprogram# makegcc -Wall -o bind_exp  bindip.c root@ubuntuServer:~/test/networkprogram# ./bind_exp 192.168.1.109 22 192.168.1.109 6000SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7root@ubuntuServer:~/test/networkprogram# netstat -an|grep 6000tcp        0      0 192.168.1.109:6000      192.168.1.109:22        TIME_WAIT 




 

原创粉丝点击