我想在ARM开发板上实现TCP的服务器和客户端功能,从而与PC机上的TCP程序通信,PC机上的tcp程序已经可以实现服务器与客户端功能,但是我的ARM板上的程序却存在如下问题:
1、服务器线程可以与PC机连接,并接收PC机发来的信息,但不能通过write来给PC机发信息;
2、客户端线程中的socket可以创建,但是与PC机connect不上;
我始终搞不清楚是哪出了问题,还请哪位高人耐心看一下,替我想想办法,万分感激!
/* server.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "pthread.h"
#define MAXLINE 80
#define SERV_PORT 8000
#define ch_SERV_PORT 1024
void clientcreat(void)
{
struct sockaddr_in selfaddr , ch_servaddr;
int ch_sockfd,n;
char ch_str[]="I am client!";
ch_sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (ch_sockfd!=-1)
printf("client socket creat!\n");
bzero(&ch_sockfd, sizeof(ch_sockfd));
ch_servaddr.sin_family = AF_INET;
ch_servaddr.sin_addr.s_addr = inet_addr("192.168.1.100");//PC机上的TCP服务器地址
ch_servaddr.sin_port = htons(ch_SERV_PORT);
if(connect(ch_sockfd, (struct sockaddr *)&ch_servaddr,sizeof(ch_servaddr)))
send(ch_sockfd, ch_str, strlen(ch_str),0);
n = read(ch_sockfd,ch_str,MAXLINE );
write(STDOUT_FILENO,ch_str,n);
close(ch_sockfd);
}
void servercreat(void)
{
struct sockaddr_in servaddr,cliaddr;
socklen_t cliaddr_len;
int listenfd, connfd,i,n;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
bind(listenfd, (struct sockaddr *)&servaddr,sizeof(servaddr));
listen(listenfd, 9);
printf("Accepting connections ...\n");
while (1) {
cliaddr_len = sizeof(cliaddr);
connfd = accept(listenfd,
(struct sockaddr *)&cliaddr,
&cliaddr_len);
n = read(connfd, buf, MAXLINE);
buf[n]='\0';
printf("received %s from %s at PORT %d\n",buf,
inet_ntop(AF_INET, &cliaddr.sin_addr, str,sizeof(str)),
ntohs(cliaddr.sin_port));
write(connfd, buf, 4);//这个地方发给客户端,但是客户端却接收不到,不知为何?
close(connfd);
}
close(listenfd);
pthread_exit(0);
}
int main(void)
{
pthread_t client_thr,server_thr;
//创建服务器线程
if(pthread_create(&server_thr,NULL,(void*)&servercreat,NULL)==0)
printf("server thread creat!");
//创建客户端线程
if(pthread_create(&client_thr,NULL,(void*)&clientcreat,NULL)==0)
printf("client thread creat!");
pthread_join(server_thr,NULL);
pthread_join(client_thr,NULL);
exit(0);
}