TCP 네트워크 프로그래밍
10623 단어 Linux 네트워크 프로그래밍tcp 프로토콜TCP 프로그래밍 모델
1.TCP 프로그래밍 모델
클라이언트
소켓 만들기
소켓 만들기
IP 주소 바인딩
감청 포트
연결 대기 중
서버 연결
데이터 수신/발송
데이터 수신/발송
연결 종료
연결 종료
참고:
2. 관련 함수
서버 측
참고:
1. 소켓의 데이터 구조
2. 문자형 IP 주소와 정형 IP 주소(네트워크 바이트 순서) 사이의 변환
3. 네트워크 바이트 및 호스트 바이트
3. 실례 프로그래밍
TCP 통신 프로그램 설계: 서버와 클라이언트가 서로 발송하고 수신하는 기능을 실현한다.
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int sockfd;
int n_sockfd;
int fd;
ssize_t num;
char sv_buf[128];
char rv_buf[128];
int sin_size;
unsigned short int portnum = 5000;
struct sockaddr_in sockaddr_sv, sockaddr_ct;
//1.
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == sockfd)
{
printf("creat sockfd fail!
");
exit(1);
}
//2. IP
sockaddr_sv.sin_family = AF_INET;
sockaddr_sv.sin_port = htons(portnum);
sockaddr_sv.sin_addr.s_addr = htonl(INADDR_ANY);
bzero(&sockaddr_sv.sin_zero,8);
if(-1 == bind(sockfd,(struct sockaddr *) &sockaddr_sv,sizeof(struct sockaddr)))
{
printf("bind port fail!
");
exit(1);
}
//3.
if(-1 == listen(sockfd,5))
{
printf("listen port fail!
");
exit(1);
}
//4.
sin_size = sizeof(struct sockaddr);
n_sockfd = accept(sockfd, (struct sockaddr *)&sockaddr_ct,&sin_size);
printf("server get connection from %s
",inet_ntoa(sockaddr_ct.sin_addr));
//5. /
while (1)
{
fgets(sv_buf,128,stdin);
send(n_sockfd, sv_buf, strlen(sv_buf), 0);
fd = fork();//
if (0 == fd)
{
while(1)
{
num = recv(n_sockfd, rv_buf, 128, 0);
rv_buf[num] = '\0';
printf("%s",rv_buf);
}
}
}
//6.
close(sockfd);
}
#include <stdio.h>
#include <strings.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int fd;
int sockfd;
int n_sockfd;
ssize_t num = 0;
char ct_buf[128];
char st_buf[128];
//int sin_size;
unsigned short int portnum = 5000;
struct sockaddr_in sockaddr_sv;
//1.
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == sockfd)
{
printf("creat sockfd is fail!");
}
//2.
sockaddr_sv.sin_family = AF_INET;
sockaddr_sv.sin_port = htons(portnum);
sockaddr_sv.sin_addr.s_addr = inet_addr("192.168.1.100");
bzero(&sockaddr_sv.sin_zero,8);
connect(sockfd,(struct sockaddr *)&sockaddr_sv,sizeof(struct sockaddr));
while (1)
{
num = recv(sockfd, ct_buf, 128, 0);
ct_buf[num] = '\0';
printf("%s",ct_buf);
fd = fork();//
if (0 == fd)
{
while(1)
{
fgets(st_buf,128,stdin);
send(sockfd, st_buf, strlen(st_buf), 0);
}
}
}
//3.
close(sockfd);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
TCP 네트워크 프로그래밍플러그인 함수 이름 만들기: socket 함수 원형: int socket (int domain, int type, int protocol) 함수 기능: 플러그인에 속하는 헤더 파일 만들기:sys/socket.h 반환...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.