센서                 

                 0~1023    |

server --------------- client

   |       1         0....*     |

   |                            |

   |                          stdoot

  DB

 

양방향 서버 

 

클라이언트 소켓을 

 

하프 클로우스 로 상대방이 끊었을떄 나옴

fgets() 엔터키ㄹ떄까지 기다림

 

 

 

이제 서버를 만들고 받을 준비를 해보자

 

 

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


#define BUF_SIZE 100
#define MAX_CLNT 256

void * handle_clnt(void * arg);
void send_msg(char * msg, int len);
void error_handling(char * msg);

int clnt_cnt=0;
int clnt_socks[MAX_CLNT];
pthread_mutex_t mutx;

int main(int argc, char *argv[])
{
	int serv_sock, clnt_sock;
	struct sockaddr_in serv_adr, clnt_adr;
	int clnt_adr_sz;
	pthread_t t_id;
	if(argc!=2) {
	printf("Usage : %s <port>\n", argv[0]);
	exit(1);
	}

	pthread_mutex_init(&mutx, NULL);
	serv_sock=socket(PF_INET, SOCK_STREAM, 0);

	memset(&serv_adr, 0, sizeof(serv_adr));
	serv_adr.sin_family=AF_INET;
	serv_adr.sin_addr.s_addr=htonl(INADDR_ANY);
	serv_adr.sin_port=htons(atoi(argv[1]));

	if(bind(serv_sock, (struct sockaddr*) &serv_adr, sizeof(serv_adr))==-1)
		error_handling("bind() error");

	if(listen(serv_sock, 5)==-1)
		error_handling("listen() error");

	while(1)
	{
		clnt_adr_sz=sizeof(clnt_adr);
		clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_adr,&clnt_adr_sz);

		pthread_mutex_lock(&mutx);
		clnt_socks[clnt_cnt++]=clnt_sock;
		pthread_mutex_unlock(&mutx);

		pthread_create(&t_id, NULL, handle_clnt, (void*)&clnt_sock);
		pthread_detach(t_id);
		printf("Connected client IP: %s \n", inet_ntoa(clnt_adr.sin_addr));
	}
	close(serv_sock);
	return 0;
}

void * handle_clnt(void * arg)
{
	int clnt_sock=*((int*)arg);
	int str_len=0, i;
	char msg[BUF_SIZE];

	while((str_len=read(clnt_sock, msg, sizeof(msg)))!=0)
		send_msg(msg, str_len);

	pthread_mutex_lock(&mutx);
	for(i=0;i<clnt_cnt; i++)
	{
		if(clnt_sock==clnt_socks[i])
		{
			while(i++<clnt_cnt-1)
				clnt_socks[i]=clnt_socks[i+1];
			break;
		}
	}
	clnt_cnt--;
	pthread_mutex_unlock(&mutx);
	close(clnt_sock);
	return NULL;
}

void send_msg(char * msg, int len) 
{
	int i;
	pthread_mutex_lock(&mutx);
	for (i=0; i<clnt_cnt; i++)
		write(clnt_socks[i], msg, len);

	pthread_mutex_unlock(&mutx);
}

void error_handling(char * message)
{
	fputs(message, stderr);
	fputc('\n', stderr);
	exit(1);
}

그리고 

접속할 유저들을 모집해보자

 

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

#define BUF_SIZE 100
#define NAME_SIZE 20 

void * send_msg(void * arg);
void * recv_msg(void * arg);
void error_handling(char * msg);

char name[NAME_SIZE]="[DEFAULT]";
char msg[BUF_SIZE];

int main(int argc, char *argv[])
{
	int sock;
	struct sockaddr_in serv_addr;
	pthread_t snd_thread, rcv_thread;
	void * thread_return;
	if(argc!=4) {
		printf("Usage : %s <IP> <port> <name>\n", argv[0]);
		exit(1);
	}

	sprintf(name, "[%s]",argv[3]);
	sock=socket(PF_INET, SOCK_STREAM, 0);

	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)
		error_handling("connect() error");

	pthread_create(&snd_thread, NULL, send_msg, (void*)&sock);
	pthread_create(&rcv_thread, NULL, recv_msg, (void*)&sock);
	pthread_join(snd_thread, &thread_return);
	pthread_join(rcv_thread, &thread_return);
	close(sock);
	return 0;
}

void * send_msg(void * arg) 
{
	int sock=*((int*)arg);
	char name_msg[NAME_SIZE+BUF_SIZE];
	while(1)
	{
		fgets(msg, BUF_SIZE, stdin);
		if(!strcmp(msg,"q\n")||!strcmp(msg,"Q\n"))
		{
			close(sock);
			exit(0);
		}
		sprintf(name_msg,"%s %s", name, msg);
		write(sock, name_msg, strlen(name_msg));
	}
	return NULL;
}

void * recv_msg(void * arg)
{
	int sock= *((int*)arg);
	char name_msg[NAME_SIZE+BUF_SIZE];
	int str_len;
	while(1)
	{
		str_len=read(sock, name_msg, NAME_SIZE+BUF_SIZE-1);
		if(str_len==-1)
			return (void*)-1;
		name_msg[str_len]=0;
		fputs(name_msg, stdout);
	}
	return NULL;
}

void error_handling(char * message)
{
	fputs("message", stderr);
	fputc('\n', stderr);
	exit(1);
}

되긴 됫는데 복잡하게 체팅이 보여 내가보낸것도 나한테오고 ,,

 

수정좀 해야겟움

블로그 이미지

Or71nH

,

## 인덕터의 개요
• 인덕터

– 전류의 자기작용을 효과적으로 나타나게 만들기 위해 사용
– 코일(Coil)
– 구리선을 서로 단락되지 않게 용수철 형태로 감아서 만듦
– 대표적인 예 : 변압기나 전동기에 사용되는 규소 강판
• 인덕턴스
– 인덕터가 가지고 있는 성질
– 단위 : [H]
• 유도성 인덕턴스(리액턴스) : 주파수에 대하여 가지는 저항 값

 

 

 

 

## 인덕터의 종류
• 주파수에 따라 : 저주파 코일, 고주파 코일
• 용도에 따라 : 동조 코일, 쵸크 코일, 발진코일, 전원 트랜스 등
• 코일 종류에 따라 : 자심 코일, 성층 철심 코일, 공심 코일, 패라이트 코일 등

## 트렌스 기호

인덕터의 기호와 기능 

1) 인덕터
• 입력 전원용 필터나 스위칭 전원의 출력 필터로 사용 

2) 가변 인덕터
• 인덕턴스의 값을 변화시킬 수 있음
• OSC, IFT 등 

3) SMD 인덕터
• 휴대용, 초소형 전자기기의 고주파용으로 사용 

4) 상호 인덕턴스(트랜스포머)
• 녹색 : IPT(Input Trans, 입력 트랜스)
• 적색 : OPT(OutPut Trans, 출력트랜스)

 

 

1) 인덕터의 특성
• 인덕턴스 : 상호 인덕턴스(Mutual inductance), 자기 인덕턴스(Self Inductance)
• 코일에는 선재를 많이 감을수록 코일의 성질이 강해지고 용량 값이 커짐
• 내부에 아무것도 넣지 않은 공심으로 하는 것보다는 철심에 감거나 패라이트 코어라 부르는 철 분말을 압축, 응고시켜 감은 것이 보다 큰 용량 값을 얻을 수 있음


• 상호 인덕턴스
  – 전류가 흐르는 코일에 다른 코일을 가까이 했을 경우, 상호 유도 작용(Mutual induction)에 의해 접근 시킨 코일에 교류 전압 발생
  – 상호 유도 작용의 정도
  – 단위 : [H]

 


• 자기 인덕턴스
  – 코일이 하나만 있는 경우에도 자신이 발생하는 자속의 변화가 자신에게 영향을 주게 됨
  – 자기 유도 작용의 정도
  – 단위 : H 사용

 

 

## 인덕터의 분류
• 주파수에 따른 분류
  – 저주파 코일
  – 고주파 코일

 

• 용도에 따른 분류
  – 잡음 방지용 코일 : 전원이나 신호 선에 콘덴서와 병합, 잡음의 진입 방지
  – 동조 코일
  – 쵸크 코일 : 회로 내에서 교류 성분 여과(filtering)
  – 고주파용 쵸크 코일 : 고주파에 대하여 높은 임피던스를 가지며 회로 내에서 고주파 전류를 저지하고 직류나 저주파에 대하여 높은 임피던스를 가져야 하므로 크기가 비교적 큼
  – 발진 코일
  – 전원 트랜스 등

## 입출력 트랜스 기호

입출력 트랜스 기호

강한 전압  -----> 전원 트랜스 -----> 적당한 전압  으로 전환

 

 

 

 

## 코일의 특성 

1) 역기전력 작용
• 전류의 변화를 안정시키려고 하는 성질
  – 코일을 지나는 자속 증가 : 자속을 감소시키는 방향으로 역기전력 발생
  – 코일을 지나는 자속 감소 : 자속을 증가시키는 방향으로 유도 기전력 발생
  – 자신의 발생 원인이 되는 자속의 변화를 방해하려는 방향으로 발생(렌츠의 법칙)


• 상호 유도 작용
  – 변압기(transformer)에 사용되는 원리 : 코일의 상호 유도 작용 이용
  – 두 코일을 가까이 하면 한쪽 코일의 전력을 다른 쪽 코일에 전달 가능
  – 1차 측 권수와 2차 측 권수의 비율에 따라 2차 측의 전압 변화

 


• 공진 작용
  – 회로 : L 과 C 로 구성
  – 기능 : 특성 주파수의 교류 전류가 흐르지 않거나 또는 흐르기 쉽게 됨
  – 어떤 특정한 주파수만을 통과시키기 위하여 사용되는 필터회로에 이용
  – 라디오의 방송국을 선택하는 튜너는 이 성질을 이용해 특정한 주파수만 선택
  – 동조회로

 

 

## 잡음방지용 코일

• 각 색 점에 맞는 유효숫자를 색 저항 판독표에서 찾아 대입

 

 

 

 

## 쵸크 코일

• 각 색 대에 맞는 유효숫자를 색 저항 판독표에서 찾아 대입

 

블로그 이미지

Or71nH

,

콘덴서(커패시터)의 개요
• 두 전극판 사이에 유전체(절연체)를 사이에 두어 각각 전극 판에 +전기와 - 전기가 충전되며, 충전된 전기가 저항 R을 통하여 방전할 수 있는 회로
• 전하를 정해진 용량만큼 저장하고 다시 이 전하를 방전
• 직류 차단과 교류 통과, 축전지, 필터 회로 등에 활용

콘덴서(커패시터)의 종류와 기호
• 세라믹 콘덴서[Ceramic Condenser]
– 유전율이 높은 산화티탄이나 티탄산바륨 등의 자기를 유전체로 하는 소자
– 극성이 없음


• 마일러 콘덴서[Mylar Condenser]
– 전하를 저장하는 기능
– 교류 회로에서 공진 소자로 사용되고 교류 신호만 통과 시킴
– 저주파 및 고주파 특성 우수


• 전해 콘덴서[Electrolytic Condenser] : 전하를 일정한 방향으로 저장, +, - 극성 존재


• 탄탈 콘덴서(TC)[Tantalum Electrolytic Condenser]
– 전해 콘덴서에 비해 충·방전이 빠르며, 온도 범위가 넓고 안정성과 수명이 뛰어남
– 누설 전류가 적음
– 전해 콘덴서에 비해 내압이 낮고 용량이 작음


• 반고정 콘덴서[Trimmer] : 고주파 회로나 발진 회로의 미세 조정에 사용


• 가변 콘덴서[Varicon]
– 연속적으로 용량 변화 가능
– 송수 진기나 발진기의 동조 회로에 사용
– 라디오 방송 주파수를 선택할 때 사용

 

 

 

1) 콘덴서(커패시터)의 종류와 규격
• 가변 콘덴서(Varicon)
• 고정 콘덴서
  – 종이 콘덴서
  – 전해 콘덴서
  – 세라믹 콘덴서
  – 마일러 콘덴서
  – 탄탈 콘덴서
  – 폴리에스테르 콘덴서
• 반고정 콘덴서(Trimmer) 

 

2) 전해 콘덴서
• 극성(+/-)이 있음
• 소형 알루미늄 전해 콘덴서에는 (-) 극성을 표시하는 띠가 있는 것이 일반적임
• (-)극 리드선의 길이를 짧게 하여 잘못 삽입되는 것을 방지 

3) 탄탈 콘덴서
• 전극에 ‘탄탈륨’ 사용
• 비교적 큰 용량을 얻을 수 있음
• 온도 특성(온도의 변화에 따라 용량이 변화는 특성) 주파수 특성 우수
• 정밀 특성 및 온도 특성 회로에 많이 사용
• (+),(-)극성 구분 : 보통 부품 평면에 (-) 극 쪽 표기, 리드선의 길이가 긴 쪽이 (+), 짧은 쪽이 (-) 극

4) 고정 콘덴서
• 세라믹 콘덴서
  – 극성이 없고 온도에 대한 안정성이 좋음 : 온도 보상 회로 사용
  – 인덕턴스가 적어 고주파 특성 양호 : 고주파의 바이패스 회로 사용
• 마일러 콘덴서
  – 얇은 폴리에스테르(polyester) 필름을 양측에서 금속으로 삽입하여, 원통형으로 감은 것
  – +,- 극성이 없음
  – 고주파 신호 전달용으로 사용
• 마이카 콘덴서
  – 전기적 특성이 좋으며 내압이 높음
  – 특히 온도 계수가 좋아서 고주파 정밀 회로에 사용
• 칩 콘덴서
  – 첨단 정밀 회로용
  – 소형으로 만들어져 리드 없이 회로와 접속

 

 

## 적층형 콘덴서 판독하기

 

1   2   3 

6   5   4

 

위와 같이 순서가 되며

식대와 같이 4개를 이용하여 산출한다

 

 

## 원통형 콘덴서 판독하기

 

 

 

전에 4색대와 같으며 5색대는 온도 계수를 표시한다

 

 

 

## 전해 콘덴서 규격 읽기
• 표면에 그려진 극성 표시방법이나 리드 선의 길이를 관찰하여 극성 구분

 

## 세라믹 콘덴서 규격 읽기

• 표면에 기록된 숫자와 문자를 보고 콘덴서의 용량과 내압, 허용 오차 판독

 

## 마일러 콘덴서 규격 읽기

• 표면의 숫자와 문자를 보고 용량과 내압, 허용 오차 판독

 

 

 

 

## 콘덴서(커패시터) 시험 방법
• 멀티 테스터를 이용하여 콘덴서의 양부 판정
• 저항계(R)에 위치하고 테스터의 리드를 접촉시키는 순간에 계측기 바늘이 올라갔다가 ∞(무한대)의 위치로 되돌아오면 정상으로 판별 

## 콘덴서의 특성 곡선

 

 

 

 

 

 

 

 

 

 

 

 

 

블로그 이미지

Or71nH

,

## 저항, 전압과 전류 

## 저항

• 전기 도선은 금속으로 만드는데, 금속 안에서 전자들이 자유롭게 움직일 수 있기 때문
• 금속 안에는 전자를 잡아 끄는 양의 전하를 가진 원자핵들이 있음
• 공간에 주기적으로 배치되어 격자를 이루고 있는 금속의 원자들은 최외각 전자들을 쉽게 놓아주는 특징이 있음
• 저항
  – 자유전자들이 금속 도선 안을 온갖 방향으로 돌아다님.
  – 도선을 따라 일정한 방향으로 흐르는 순 전류가 없는 상태 2) 전압과 전류
• 전류
  – 양의 전하는 전위가 낮은 곳으로, 음의 전하는 전위가 높은 곳
  – 양쪽의 전위 차이가 없어질 때까지 움직임
• 물체가 위에서 아래로 떨어지는 이유 : 중력에 의한 위치에너지를 줄이기 위함
• 전하가 이동하는 이유 : 전기적인 위치에너지를 줄이기 위해 , 전위가 높은 곳에서 낮은 곳으로 이동함
• 전압 : 음의 전하가 많은 곳은 전위가 낮고, 양의 전하가 많은 곳은 전위가 높음

 

## 옴의 법칙

• 전류는 저항 양단에 가한 전압 또는 전위차에 비례, 저항에 반비례하는 법칙
• 전류의 세기는 두 점 사이의 전위차에 비례, 저항에 반비례하는 법칙 

##직렬연결된 저항의 합성 값

전체저항 Rt = R₁ + R₂ + R₃

• 저항 값은 증가함
• 전류는 옴의 법칙에 의하여 점점 작게 흐르게 됨 

 

## 병렬 연결된 저항의 합성 값 

병렬 연결

• 저항 값은 감소함


• 전류는 옴의 법칙에 의하여 점점 크게 흐르게 됨 

 

 

키르히호프의 법칙

• 임의의 복잡한 회로를 흐르는 전류를 구할 때 사용
• 전류에 관한 제1법칙과 전압에 관한 제2법칙
• 폐 회로망에서 1개 이상의 전원이 저항이나 임피던스에 접속되어 있을 때, 전류 법칙(제1법칙)과 전압 법칙(제2법칙)을 이용하여 각 저항에 흐르는 전류 값을 계산

 

 

## 제1법칙(전류의 법칙)

 

키르히호프의 제1법칙

– 접합점법칙 또는 전류 법칙
– 회로망 중 임의의 접속점(마디)에 들어가는 전류의 대수합은 그 접속점으로부터 나오는 전류의 대수합과 같음
– 근거 : 전하가 접합점에서 저절로 생기거나 없어지지 않는다는 전하 보존법칙

 

 

## 제2법칙(전압의 법칙)

키르히호프의 제2법칙

• 폐회로 법칙, 고리 법칙, 전압 법칙(근거 : 에너지 보존 법칙)
• 폐회로에서 기전력의 대수합은 각 부의 전압 강하의 대수합과 같음
• 직류와 교류 모두 적용 가능
• 저항 외에 인덕턴스, 콘덴서를 포함하거나 저항을 임피던스로 바꿀 수 있음
• 복잡한 회로망의 해석에 많이 쓰임

 

 

 

블로그 이미지

Or71nH

,

 

##저항기의 분류
• 재료, 제조 방법, 형태에 따라 다양한 종류
• 전자산업의 발전에 따라 새로운 저항기들이 개발
• 고정 저항기

  – 탄소계 : 탄소피막 저항기(155℃) , 솔리드 저항기(125℃) 
  – 금속계 : 금속필름 저항기, 산화금속피막 저항기(155 ~ 175℃), 메탈글래즈 저항기, 휴즈형 저항기
  – 권선형 : 권선형 저항기(270℃), 권선형 무유도저항기, 전략형 시멘트 저항기, 메탈클래드 저항기(155 ~ 175℃) 
  – 후막형 : 후막 칩 저항기(125℃), 후막 칩 어레이 저항기, 후막 네트웍 저항기, 후막칩 네트웍 저항기
  – 박막형 : 박막 칩 저항기
  – 기타 특수형 : PTC 서미스터, NTC 서미스터, 배리스터
• 가변 저항기 : 탄소피막형, 후막형, 코일형, 반고정형, 포텐시오메타형 

## 저항기의 특징
• 고정 저항기
  – 소비전력에 따라 : 0.125W, 0.25W , 0.5W, 1, 2W, 5W, 등으로 구분
  – 재질에 따라 : 탄소피막 저항기, 권선형 저항기, 금속피막 저항기, 범람형 저항기, 칩 저항기, 어레이 저항기 등으로 구분
  – 탄소피막 저항기 : 소형, 수동소자, 색대로 표시, 가장 흔히 사용되는 수동 소자
  – 범랑형 저항기 : 세라막 저항기, 소비전력이 큰 회로에 사용
• 가변 저항기
  – 저항기 중간에 이동단자 탭 설치 : 세 점 사이의 저항값이 변화되어 전압의 강하 또는 전류를 분배하는 회로에 이용
  – 가변저항기의 이용 : 소리의 크기 조절, 화면의 밝기 조절에 사용, 손잡이를 이용하여 조정하는 가변저항기와 드라이버로 조정하는 반고정저항기

 

권선 저항은 고주파 회로에서는 코일의 분포 용량이 문제가 되어 사용되지 않음

 

## 색갈마다 의미하는 번호 및 저항 값

 

 

 

## 색 저항 판독법

 

1색대와 2색대, 3색대를 붙이고

4색대는 제급근으로 

5색대는 오차 범위로 한다

 

저항 값 : (1 ++ 2 ++ 3) x 4ⁿ = ?Ω 

오차 : 5

 

 

##

 

## 저항에 대하여 약속

 

# 저항에 종류에따른 저항기 곡선

저항기의 머리 꼬리

 

 

블로그 이미지

Or71nH

,