LwIP socket 기반 TCP 서버

1971 단어 LwIP
위의 글은 TCP 클라이언트의 작성 방법을 소개했는데, 이 글은 주로 TCP 서버의 작성 절차 방법을 소개했는데, 그 절차는 다음과 같다.
1. 흐름 기반 socket 만들기
2. 로컬 서버 IP 주소 및 포트 번호 설정
3. 생성된 socket 및 로컬 IP 주소 및 포트 정보 바인딩
4. 이 socket 감청 (listen)
5. 이 socket 수락 (accept)
6. 데이터 전송, 수신
상기 몇 가지 절차를 거친 후에 간단한 서버가 만들어졌다. TCP 서버는 주로 감청과 수락 두 가지 절차가 많고 연결 절차가 적다. 그 원본 코드는 다음과 같다.
#include 
#include 
#include 

#define	PORT			50000

RAW_U8 data_buffer[100];

static void tcp_server_thread(void *p_arg)
{
	struct sockaddr_in server_addr;
	struct sockaddr_in conn_addr;
	int sock_fd;				/* server socked */
	int sock_conn;			/* request socked */
	socklen_t addr_len;
	int err;
	int length;
	int count = 0;
	
	
	sock_fd = socket(AF_INET, SOCK_STREAM, 0);
	if (sock_fd == -1) {
		Uart_Printf("failed to create sock_fd!
"); RAW_ASSERT(0); } raw_memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr =htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); err = bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (err < 0) { RAW_ASSERT(0); } err = listen(sock_fd, 1); if (err < 0) { RAW_ASSERT(0); } addr_len = sizeof(struct sockaddr_in); Uart_Printf("before accept!
"); sock_conn = accept(sock_fd, (struct sockaddr *)&conn_addr, &addr_len); Uart_Printf("after accept!
"); while (1) { raw_memset(data_buffer, 0, sizeof(data_buffer)); length = recv(sock_conn, (unsigned int *)data_buffer, 20, 0); Uart_Printf("length received %d
", length); Uart_Printf("received string: %s
", data_buffer); Uart_Printf("received count: %d
", count); send(sock_conn, "good", 5, 0); } } void tcp_server_init(void) { sys_thread_new("tcp_server_thread", tcp_server_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO - 1); }

좋은 웹페이지 즐겨찾기