日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

之前介紹了網絡字節序。網絡編程之網絡字節序詳解

今天就來實現一下簡單的網絡程序。

先看幾個函數

// 創建socket套接字
int socket(int domain, int type, int protocol);
// 綁定服務器地址
int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
// 接收連接
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
// 連接服務器
int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);

服務器端程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/.NET.h>
#include <sys/socket.h>

typedef struct _MSG {
	int id;
	short length;
	short reserve;
	char content[100];
} MSG;

int main(int argc, char *argv[])
{
	int serv_sock;
	int clnt_sock;

	struct sockaddr_in serv_addr;
	struct sockaddr_in clnt_addr;
	socklen_t clnt_addr_size;

	char message[] = "Hello world!";

	if (argc != 2)
	{
		printf("Usage: %s <port>n", argv[0]);
		return -1;
	}

	serv_sock = socket(AF_INET, SOCK_STREAM, 0);
	if (serv_sock == -1) {
		printf("socket errorn");
		return -1;
	}

	memset(&serv_addr, 0, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;
	// 轉換為網絡字節序,INADDR_ANY表示綁定本機所有ip地址
	serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
	// 將端口轉換為網絡字節序
	serv_addr.sin_port = htons(atoi(argv[1]));

	if (bind(serv_sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1) {
		printf("bind errorn");
		return -1;
	}

	if (listen(serv_sock, 5) == -1) {
		printf("listen errorn");
		return -1;
	}

	clnt_addr_size = sizeof(clnt_addr);
	clnt_sock = accept(serv_sock, (struct sockaddr *)&clnt_addr, &clnt_addr_size);
	if (clnt_sock == -1) {
		printf("accept errorn");
	}

	for (int i = 0; i < 10; i++) {
		MSG msg;
		msg.id = htonl(i);
		msg.length = htons(strlen("hello world"));
		msg.reserve = htons(0);
		strcpy(msg.content, "hello world");

		write(clnt_sock, (char *)&msg, sizeof(MSG));
	}

	close(clnt_sock);
	close(serv_sock);

	return 0;
}

客戶端程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

typedef struct _MSG {
	int id;
	short length;
	short reserve;
	char content[100];
} MSG;

int main(int argc, char *argv[])
{
	int sock;
	struct sockaddr_in serv_addr;
	int str_len;

	if (argc != 3)
	{
		printf("Usage: %s <IP> <port>n", argv[0]);
		return -1;
	}

	sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock == -1) {
		printf("socket errorn");
		return -1;
	}

	memset(&serv_addr, 0, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
	serv_addr.sin_port = htons(atoi(argv[2]));

	if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1) {
		printf("connect errorn");
		return -1;
	}

	for (;;) {
		MSG msg;
		str_len = read(sock, &msg, sizeof(msg));
		if (str_len <= 0) {
			printf("read errorn");
			break;
		}
		msg.id = ntohl(msg.id);
		msg.length = ntohs(msg.length);
		printf ("msg(id, length, content): %3d, %3d, %sn", msg.id, msg.length, msg.content);
	}


	close(sock);

	return 0;
}

運行效果如下

 

C語言進行Linux網絡編程

 

 

 

C語言進行Linux網絡編程

分享到:
標簽:網絡編程
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定