PDA

View Full Version : BSD_socket- Các bác dành chút thời gian giúp em nhé!


vhg
22-01-2010, 11:02 PM
em đang viết đoạn chương trình cho client trên PIC32 để yêu cầu connect tới server trên PC.Em đã giao tiếp tốt giữa 2 PC cũng với chươnng trình cho PC đó.Nhưng trên PIC32 em ko thể nào connect được.Project của em dùng thư viện pic32mx_mchp_tcp_ip_v1_0_00.Đây là đoạn chương trình chính của em.Các bác xem còn sai gì nhé.em test phần cứng và khẳng định ok:
#pragma config FPLLMUL = MUL_18, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF, WDTPS = PS512
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2, DEBUG = OFF, IESO = OFF, FCKSM = CSDCMD, FSOSCEN = OFF
#define PC_SERVER_IP_ADDR "10.10.33.79"
#define CLIENT_IP_ADDR "10.10.33.201"
static unsigned int i,j,k;

static BYTE bfr[100];
REG b;
BYTE a;
//-------------------------------------------------------------------
void SetupDefault_IP_MAC()
{
// Initialize default IP and MAC address
IP_StrToDWord( DEFAULT_IP_ADDR, &SysIPAddr.Val );
IP_StrToDWord( DEFAULT_IP_MASK, &SysIPMask.Val );
IP_StrToDWord( DEFAULT_IP_GATEWAY, &SysIPGateway.Val );
MAC_StrToBin ( DEFAULT_MAC_ADDR, SysMACAddr.v );
}

//--------------------------------------------------------------------
int main()
{
SOCKET sclient;
struct sockaddr_in addr;
int addrlen = sizeof(struct sockaddr_in);
BOOL ClientConnected = FALSE;
DWORD TestServerIP, clientIP;
int len=100;
SYSTEMConfigWaitStatesAndPB(72000000);
TRISC=0x00;
TRISE=0x00;
_LATE9=1;
_LATC1=1;
_LATE9=0;
_LATC2=1;
_LATE9=1;
OpenXLCD(0x3F);
WriteCmdXLCD(0x01);
INTEnableSystemMultiVectoredInt();
SetupDefault_IP_MAC();
MSTimerInit(36000000);
InitStackMgr();
TickInit();

IP_StrToDWord( PC_SERVER_IP_ADDR, &TestServerIP );
IP_StrToDWord( CLIENT_IP_ADDR, &clientIP );

//create tcp client socket
if( (sclient = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )) == SOCKET_ERROR )
return -1;
//bind to a unique local port
addr.sin_port = 7000; // Let the stack pick a unique port for us
addr.sin_addr.S_un.S_addr = clientIP;//IP_ADDR_ANY;

if( bind(sclient ,(struct sockaddr*)&addr, addrlen ) == SOCKET_ERROR )
return -1;

ClientConnected = FALSE;
addr.sin_port = 7000;//SERVER_PORT;
addr.sin_addr.S_un.S_addr = clientIP;//TestServerIP;//SERVER_IP;
addrlen = sizeof(struct sockaddr);
setsockopt( sclient, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int) );

addrlen = sizeof(struct sockaddr);

WriteCmdXLCD(0x01);

LATA=0;
WriteDataXLCD(6%10+0x30);
while(1)
{

StackMgrProcess();
len = 10;

if( !ClientConnected )
{
if(k++==2)
{
if( connect( sclient, (struct sockaddr*)&addr, addrlen ) == 0 )
{
ClientConnected = TRUE;
WriteCmdXLCD(0x01);
PutsXLCD("Connected!");
while(1);
}
WriteCmdXLCD(0x02);
WriteDataXLCD(LATA%10+0x30);
i++;
//j=0;
k=0;
}
}
for (j=0;j<200000;j++);
}
}

bien_van_khat
23-01-2010, 08:38 PM
Sơ đồ mạch???

vhg
29-01-2010, 10:22 PM
em đã làm cho nó chạy dc rồi.Thanks bác nhé!