Bài học đa tiểu trình
Trang 1 trong tổng số 1 trang
Bài học đa tiểu trình
Các bạn ơi mình vừa sưu tầm được code cho phép client và server có thể liên lạc với nhau một cách song song nè: bạn nào muốn quan tâm thì coi nhé, nhưng mình nói trước đoạn code có phần mình chưa hiểu lắm cơ:
*/// Chương bên server * ////
#include<conio.h>
#include<stdio.h>
#include<winsock2.h>
#include<stdlib.h>
#include<process.h>
// da tieu trinh thuc hien viec gui va nhan 1 cach song song
void Recv(void *s) //tao 1 tieu trinh Recv co kieu la void
{
char buffer[128];
while(1)
{ //* cua SOCKET * la gia tri cua *SOCKET
int iR = recv(*(SOCKET *)s, buffer, 128, 0); // ket qua tra ve la so nguyen
buffer[iR]='\0';// ep kieu so nguyen iR thanh chuoi
printf("\n %s",buffer);// sau do xuat ra chuoi nay
if(iR <= 0)
break;
}
_endthread();
}
// bat dau ham chinh
void main()
{
WORD wVer=MAKEWORD(2,2);
WSADATA wsaData;
int iR=WSAStartup(wVer,&wsaData);
if(iR!=0)
{
printf("Khong khoi dong duoc");
return;
}
/* if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
{
printf("\n Khong dung phien ban");
return;
}
*/
printf("\n Da dung phien ban");
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(10000);
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
iR=bind(s,(LPSOCKADDR)&addr,sizeof(addr));
if(iR==SOCKET_ERROR)
{
printf("\n Khong bind duoc");
return;
}
printf("\n Da tao xong cong va dia chi");
printf("\n Dang cho ket noi");
//lang nghe ket noi listen
listen(s,10);//-> luu lai cac ket noi chua duoc trinh chu xu li kip voi so ket noi toi da la 10
int len=sizeof(addr);
//ham cho ket noi
SOCKET sClient=accept(s,(LPSOCKADDR)&addr,&len);// cho client ket noi vao
if(sClient==INVALID_SOCKET)
{
printf("Accept failed:");
return;
}
printf("\nDa chap nhan client\n");
// bat dau 1 tieu trinh bang cah goi la ham Recv neu co ket qua gui den thi nhan
_beginthread(Recv,0,(void *)&sClient);
//neu khong co thi nhap tin nhan moi de gui di cho client
char buffer[20];// mang luu cac tin nhan duoc nhap vao tu nguoi dung co chieu dai toi da la 20 ki tu
while(1)
{
printf("\n Nhap vao 1 msg:");
gets(buffer);
send(sClient,buffer,strlen(buffer),0);
if(strcmp(buffer,"quit")==0) //qua trinh ket thuc khi nguoi dung nhap vao chu quit
break;
}
closesocket(s);
WSACleanup();
}
//* Chương trình bên clien ///
#include<stdio.h>
#include<winsock2.h>
#include<stdlib.h>
#include<conio.h>
#include<process.h>
// client va server thuc hien viec gui nhan 1 cach song song voi nha
//nghia la client co the nhap va gui den cho server dong thoi tu server co the nhap nhap
//tin nhan khac tra loi cho client
void Recv(void *s)
{
char buffer[128];
while(1)
{
int iR=recv(*(SOCKET *)s,buffer,128,0);
buffer[iR]='\0';
printf("\n %s",buffer);
if(strcmp(buffer,"quit")==0)
break;
}
_endthread();
}
void main()
{
WSADATA wsaData;
int iR=WSAStartup(MAKEWORD(2,2),&wsaData);
if(iR!=0)
{
printf("\n Khong khoi dong duoc");
return;
}
/* if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
{
printf("\n Khong dung phien ban");
return;
}
*/
printf("Loading complete!\n");
printf("Started........\n");
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN toaddr;
toaddr.sin_family=AF_INET;
toaddr.sin_port=htons(10000);
toaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
//ham ket noi den server thong qua connect
iR=connect(s,(LPSOCKADDR)&toaddr,sizeof(toaddr));
if(iR==SOCKET_ERROR)
{
printf("Khong ket noi duoc, Loi: %d\n",WSAGetLastError());
return;
}
//ham wsagetlasterror duoc dinh nghia san trong winsock duoc dung de xu cac loi khi no phat sinh
// gia tri tra ve cua ham nay la 1 so nguyen
printf("\nKet noi thanh cong voi serer\n");
char buffer[20];
_beginthread(Recv,0,(void *)&s);
while(1)
{
printf("\n Nhap vao 1 msg:");
gets(buffer);
send(s,buffer,sizeof(buffer),0);
if(strcmp(buffer,"quit")==0)
break;
}
getch();
closesocket(s);
WSACleanup();
}
Chúc các bạn học vui vè
*/// Chương bên server * ////
#include<conio.h>
#include<stdio.h>
#include<winsock2.h>
#include<stdlib.h>
#include<process.h>
// da tieu trinh thuc hien viec gui va nhan 1 cach song song
void Recv(void *s) //tao 1 tieu trinh Recv co kieu la void
{
char buffer[128];
while(1)
{ //* cua SOCKET * la gia tri cua *SOCKET
int iR = recv(*(SOCKET *)s, buffer, 128, 0); // ket qua tra ve la so nguyen
buffer[iR]='\0';// ep kieu so nguyen iR thanh chuoi
printf("\n %s",buffer);// sau do xuat ra chuoi nay
if(iR <= 0)
break;
}
_endthread();
}
// bat dau ham chinh
void main()
{
WORD wVer=MAKEWORD(2,2);
WSADATA wsaData;
int iR=WSAStartup(wVer,&wsaData);
if(iR!=0)
{
printf("Khong khoi dong duoc");
return;
}
/* if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
{
printf("\n Khong dung phien ban");
return;
}
*/
printf("\n Da dung phien ban");
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(10000);
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
iR=bind(s,(LPSOCKADDR)&addr,sizeof(addr));
if(iR==SOCKET_ERROR)
{
printf("\n Khong bind duoc");
return;
}
printf("\n Da tao xong cong va dia chi");
printf("\n Dang cho ket noi");
//lang nghe ket noi listen
listen(s,10);//-> luu lai cac ket noi chua duoc trinh chu xu li kip voi so ket noi toi da la 10
int len=sizeof(addr);
//ham cho ket noi
SOCKET sClient=accept(s,(LPSOCKADDR)&addr,&len);// cho client ket noi vao
if(sClient==INVALID_SOCKET)
{
printf("Accept failed:");
return;
}
printf("\nDa chap nhan client\n");
// bat dau 1 tieu trinh bang cah goi la ham Recv neu co ket qua gui den thi nhan
_beginthread(Recv,0,(void *)&sClient);
//neu khong co thi nhap tin nhan moi de gui di cho client
char buffer[20];// mang luu cac tin nhan duoc nhap vao tu nguoi dung co chieu dai toi da la 20 ki tu
while(1)
{
printf("\n Nhap vao 1 msg:");
gets(buffer);
send(sClient,buffer,strlen(buffer),0);
if(strcmp(buffer,"quit")==0) //qua trinh ket thuc khi nguoi dung nhap vao chu quit
break;
}
closesocket(s);
WSACleanup();
}
//* Chương trình bên clien ///
#include<stdio.h>
#include<winsock2.h>
#include<stdlib.h>
#include<conio.h>
#include<process.h>
// client va server thuc hien viec gui nhan 1 cach song song voi nha
//nghia la client co the nhap va gui den cho server dong thoi tu server co the nhap nhap
//tin nhan khac tra loi cho client
void Recv(void *s)
{
char buffer[128];
while(1)
{
int iR=recv(*(SOCKET *)s,buffer,128,0);
buffer[iR]='\0';
printf("\n %s",buffer);
if(strcmp(buffer,"quit")==0)
break;
}
_endthread();
}
void main()
{
WSADATA wsaData;
int iR=WSAStartup(MAKEWORD(2,2),&wsaData);
if(iR!=0)
{
printf("\n Khong khoi dong duoc");
return;
}
/* if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
{
printf("\n Khong dung phien ban");
return;
}
*/
printf("Loading complete!\n");
printf("Started........\n");
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN toaddr;
toaddr.sin_family=AF_INET;
toaddr.sin_port=htons(10000);
toaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
//ham ket noi den server thong qua connect
iR=connect(s,(LPSOCKADDR)&toaddr,sizeof(toaddr));
if(iR==SOCKET_ERROR)
{
printf("Khong ket noi duoc, Loi: %d\n",WSAGetLastError());
return;
}
//ham wsagetlasterror duoc dinh nghia san trong winsock duoc dung de xu cac loi khi no phat sinh
// gia tri tra ve cua ham nay la 1 so nguyen
printf("\nKet noi thanh cong voi serer\n");
char buffer[20];
_beginthread(Recv,0,(void *)&s);
while(1)
{
printf("\n Nhap vao 1 msg:");
gets(buffer);
send(s,buffer,sizeof(buffer),0);
if(strcmp(buffer,"quit")==0)
break;
}
getch();
closesocket(s);
WSACleanup();
}
Chúc các bạn học vui vè
Khách vi- Khách viếng thăm
Similar topics
» Thảo luận Bài 2
» Thảo luận Bài 7
» Phát biểu bài toán Sản xuất-Tiêu thụ với giải pháp đồng bộ hóa công việc các tiến trình sãn xuất-tiêu thụ bằng 3 đèn hiệu
» Tiến trình (Process) và tiểu trình (Thread):
» Tiến trình (Process) và tiểu trình (Thread):
» Thảo luận Bài 7
» Phát biểu bài toán Sản xuất-Tiêu thụ với giải pháp đồng bộ hóa công việc các tiến trình sãn xuất-tiêu thụ bằng 3 đèn hiệu
» Tiến trình (Process) và tiểu trình (Thread):
» Tiến trình (Process) và tiểu trình (Thread):
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết