'[ 충남인력개발원 ] (2019)/┗TCP&IP'에 해당되는 글 43건

일단은 mysql 설치부터 해야한다

보면 위에 

sudo apt-get install mysql-server mysql-client

이거 쳐주고 띄어쓰기 주의!!

 

Y 만 눌러주면 설치 잘해줌

 

 

 

 

다시하면 설치되있어서 이리뜸

 

 

이제 소두를 이용해서 mysql 를 실행하자

 

 

 

database 들중에서 

 

use mysql;

을 사용하여 들어간다!

 

 

그리고 좀봄

저기 유저가 보인다 저기로그인 정보가 있을것이다

함불러와 보자 

 

정말 보기힘들지마 

authentication_string 이 암호다!

게불러오자

난 암호가 설정해줘서 이렇게 암호가 있다고 나온다

 

암튼 암호 바꾸기 시작해보자 

 

update user set authentication_string=password('1234') where user='root';

 

바뀜

리플레쉬 한번 해주고

 

flush privileges;

 

나가자

이거나 exit;

 

이거  quit;

암거나 둘다됨

 

그럼 이제 인터넷이 연결될 수 있게

 

하 /....  파일부터 찾자 안나오더라 한번에 

mysql 에서 mysqld.cnf를 찾아야한다

찾움

참고 위치

cd /etc/mysql/mysql.conf.d/

 

 

이제 vi 로 들어가서 좀 지우자

#붙이면 주석 처리되서

실행이 안되게 된다

 

수정이 안된다...

 

 

관리자 권한으로 해야한다

 

sudo vi mysqld.cnf

 

 

 

수정하고 그럼 이제  다시시작

 

sudo service mysql restart

 

 

이제 준비는 완료하엿다

mysql 관리자 권한만 수정하면 

 

하고싶은데로 할수 있다

 

 

 

mysql 들어가서 

 

grant all privileges on *.* to root@localhost identified by '1234';

권한 설정 하는거임 

 

 

끝 쓰면됨

 

 

 

 

 

블로그 이미지

Or71nH

,

 

                            센서                 

                 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

,

이녀석들은 키다

 

저 sem init 가 열쇠고

 

sem_t 가 세트인듯하다

 

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>

void * read(void * arg);
void * accu(void * arg);
static sem_t sem_one;
static sem_t sem_two;
static int num;

int main(int argc, char *argv[])
{
	pthread_t id_t1, id_t2;
	sem_init(&sem_one, 0, 0);
	sem_init(&sem_two, 0, 1);
	
	pthread_create(&id_t1, NULL, read, NULL);
	pthread_create(&id_t2, NULL, accu, NULL);
	
	pthread_join(id_t1, NULL);
	pthread_join(id_t2, NULL);	

	sem_destroy(&sem_one);
	sem_destroy(&sem_two);
	return 0;
}

void * read(void * arg)
{
	int i;
	for(i=0; i<5; i++)
	{
		fputs("Iput num: ", stdout);

		sem_wait(&sem_two);
		scanf("%d", &num);
		sem_post(&sem_one);
	}
	return NULL;
}

void * accu(void * arg)
{
	int sum=0, i;
	for(i=0; i<5; i++)
	{
		sem_wait(&sem_one);
		sum+=num;
		sem_post(&sem_two);
	}

	printf("Result: %d \n", sum);
	return NULL;
}

저거 음 저 

 

0

1

키 홈모양인듯 다른 자물쇠와 키인듯

 

'[ 충남인력개발원 ] (2019) > ┗TCP&IP' 카테고리의 다른 글

Mysql 리눅스 연동하기  (0) 2019.11.28
리눅스 체팅 연동  (0) 2019.11.28
쓰레드 주고 받기 덮어쓰기 없에기  (0) 2019.11.27
쓰레드 주고 받기 우아아  (0) 2019.11.27
프로세스 쓰레드  (0) 2019.11.27
블로그 이미지

Or71nH

,

쓰레드를 주고 받을때 같은 값을 가져가서 덮어 쓴느 경우가 생긴다

 

그러면 계산된 값이 둘중에 한 애꺼만 받게 되는데 

그래서 한녀석 계산 끝날때까지 기다렷다가

하면 된다

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define NUM_THREAD 100

void * thread_inc(void * arg);
void * thread_des(void * arg);

long long num=0;
pthread_mutex_t mutex;

int main(int argc, char *argv[])
{
	pthread_t thread_id[NUM_THREAD];
	int i;

	pthread_mutex_init(&mutex, NULL);

	for(i=0; i<NUM_THREAD; i++)
	{
		if(i%2)
			pthread_create(&(thread_id[i]), NULL, thread_inc, NULL);
		else
			pthread_create(&(thread_id[i]), NULL, thread_des, NULL);
	}

	for(i=0; i<NUM_THREAD; i++)
		pthread_join(thread_id[i], NULL);

	printf("result: %lld \n", num);
	pthread_mutex_destroy(&mutex);
	return 0;
}

void * thread_inc(void * arg)
{
	int i;
	pthread_mutex_lock(&mutex);
	for(i=0; i<50000000; i++)
		num+=1;
	pthread_mutex_unlock(&mutex);
	return NULL;
}

void * thread_des(void * arg)
{
	int i;
	pthread_mutex_lock(&mutex);
	for(i=0; i<50000000; i++)
		num-=1;
	pthread_mutex_unlock(&mutex);
	return NULL;
}

이똥색의 뜻을 알았다

쓰레드 중복되고 계속 돌아갈거같은거 똥색임

상관없음 리눅스에선 

 

언제나 에러와 함께하는 나~

 

변함없는 모습 음음 좋아

 

gcc mutex.c -D_REENTRANT -o mutex -lpthread 

이게 중요함 선언할때 스레드 그 장굼도 넣어준다는 뜻

'[ 충남인력개발원 ] (2019) > ┗TCP&IP' 카테고리의 다른 글

리눅스 체팅 연동  (0) 2019.11.28
쓰레드 키주고 받으면서 하기  (0) 2019.11.27
쓰레드 주고 받기 우아아  (0) 2019.11.27
프로세스 쓰레드  (0) 2019.11.27
git hub 추가 하기  (0) 2019.11.27
블로그 이미지

Or71nH

,

int a=0

int *p =0

 

p=&a;

 

void * if(void * arg)

{

     int*p = malloc()

 

return p;

}

 

pthread_join( t_id, &p);

 

남의 void 가서 *변수 하면 값을 가져옴

 

void 를 넘길 때 는 주소를 넘겨 (&변수) 받을 그릇을 넘겨야 값을 받아올수있다

 

 

gcc thread.c -o thread -lpthread

이거 엘피 스레드 꼭 써줘야함 주위!!!!!

 

 

 

tread1.c

 

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void* thread_main(void *arg);

int main(int argc, char *argv[])
{
	pthread_t t_id;
	int thread_param=5;

	if(pthread_create(&t_id, NULL, thread_main, (void*)&thread_param)!=0)
	{
		puts("pthread_create() error");
		return -1;
	};

	sleep(10); puts("end of main");
	return 0;
}

void* thread_main(void *arg)
{
	int i;
	int cnt=*((int*)arg);
	for(i=0;i<cnt;i++)
	{
		sleep(1); puts("running thread");
	}
	return NULL;
}

 

 

 

예는 걍 주고 받는 애

부모쓰레드가 10초 기다려주고

5초 기다리는 자식폼

 

thread2.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>

void* thread_main(void *arg);

int main(int argc, char *argv[])
{
	pthread_t t_id;
	int thread_param=5;
	void * thr_ret;

	if(pthread_create(&t_id, NULL, thread_main, (void*)&thread_param)!=0)
	{
		puts("pthread_create() error");
		return -1;
	};

	if(pthread_join(t_id, thr_ret)!=0)
	{
		puts("pthread_join() error");
		return -1;
	};

	printf("Thread return message: %s \n", (char*)thr_ret);
	free(thr_ret);
	return 0;
}

void* thread_main(void *arg)
{
	int i;
	int cnt=*((int*)arg);
	char * msg=(char *)malloc(sizeof(char)*50);
	strcpy(msg, "Hello, I'am thread~ \n");
	
	for(i=0; i<cnt; i++)
	{
		sleep(1); puts("running thread");
	}
	return (void*)msg;
}

애는 닫아 주기도 하고

 

 

 

thread3.c

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void * thread_summation(void * arg);
int sum=0;

int main(int argc, char *argv[])
{
	pthread_t id_t1, id_t2;
	int range1[]={1, 5};
	int range2[]={6, 10};

	pthread_create(&id_t1, NULL, thread_summation, (void *) range1);
	pthread_create(&id_t2, NULL, thread_summation, (void *) range2);
	
	pthread_join(id_t1, NULL);
	pthread_join(id_t2, NULL);
	printf("result: %d \n", sum);
	return 0;
}

void * thread_summation(void * arg)
{
	int start=((int*)arg)[0];
	int end=((int*)arg)[1];
	
	while(start<=end)
	{
		sum+=start;
		start++;
	}
	return NULL;
}

위에 썸이 충돌위험이 있음 왜냐면

전역변수에서 같이 써서 이거 sum 에 같이 드리부움

 

 

thread4.c

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREAD 100

void * thread_inc(void * arg);
void * thread_des(void * arg);
long long num=0;   // long long형은 64 비트 정수 자료형

int main(int argc, char *argv[])
{
	pthread_t thread_id[NUM_THREAD];
	int i;

	printf("sizeof long long: %ld \n", sizeof(long long));
	for(i=0; i<NUM_THREAD; i++)
	{
		if(i%2)
			pthread_create(&(thread_id[i]), NULL, thread_inc, NULL);
		else 
			pthread_create(&(thread_id[i]), NULL, thread_des, NULL);
	}

	for(i=0; i<NUM_THREAD; i++)
		pthread_join(thread_id[i], NULL);

	printf("result: %lld \n", num);
	return 0;
}

void * thread_inc(void * arg)
{
	int i;
	for(i=0; i<50000000; i++)
		num+=1;
	return NULL;
}
void * thread_des(void * arg)
{
	int i;
	for(i=0; i<50000000; i++)
		num-=1;
	return NULL;
}

와 드뎌 최종임 음 왜 갈색이지

 

 

 

스레드를 이용해서 넘겨주고 받고 음 

잘 할당해야지 싸우지않음

 

 

 

애는 오류 날꺼임 이거 해결하는방법임

 

 

'[ 충남인력개발원 ] (2019) > ┗TCP&IP' 카테고리의 다른 글

쓰레드 키주고 받으면서 하기  (0) 2019.11.27
쓰레드 주고 받기 덮어쓰기 없에기  (0) 2019.11.27
프로세스 쓰레드  (0) 2019.11.27
git hub 추가 하기  (0) 2019.11.27
브로드 캐스트  (0) 2019.11.26
블로그 이미지

Or71nH

,