socket通信-udp和TCP-串口通信《區別》
1.UDP串口不用 IP地址 client和server可以不分先後都可以執行
2.TCP串口要用IP地址,分先後,server先,client後,還要等段時間再可以執行
##############################################################
##############################################################
第一,串口通信UDP
《Makefile》
# Makefile
#
#CROSS_COMPILE = arm-linux-gnu-
CC = $(CROSS_COMPILE)gcc
ifdef CROSS_COMPILE
TARGET = /opt/filesystem
endif
DEBUG = -g -O0 -Wall
CFLAGS += $(DEBUG)
PROGS = ${patsubst %.c, %, ${wildcard *.c}}
all : $(PROGS)
install: $(PROGS)
ifdef CROSS_COMPILE
mkdir $(TARGET)/root/long_term/networks -p
cp $(PROGS) $(TARGET)/root/long_term/networks -f
endif
% : %.c
$(CC) $(CFLAGS) $< -o $@
.PHONY: uninstall clean dist
uninstall :
ifdef CROSS_COMPILE
cd $(TARGET)/root/long_term/networks && rm -f $(PROGS)
endif
clean : uninstall
- rm -f $(PROGS) core *.gz *~
dist: clean
tar czf ../farsight_simple_select_demo1.41.tar.gz *.c ../myselect
********************************************************************
客戶端,發信息端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SERVER_PORT 5432
int main(int argc, char *argv[])
{
char buf[256], *p;
struct sockaddr_in sin;
int fd, newfd, len;
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
fprintf(stderr, "ERROR: Can not create socket!\n");
exit(1);
}
bzero((char *) &sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(SERVER_PORT);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
fprintf(stderr, "Server IP/Port: %d.%d.%d.%d/%d\n",
*((unsigned char *) &sin.sin_addr.s_addr + 0),
*((unsigned char *) &sin.sin_addr.s_addr + 1),
*((unsigned char *) &sin.sin_addr.s_addr + 2),
*((unsigned char *) &sin.sin_addr.s_addr + 3), htons(sin.sin_port));
len = read(0, buf, 256);
if (len > 0) {
sendto(fd, buf, len, 0, (struct sockaddr *) &sin, sizeof(sin));
}
close(fd);
return 0;
}
執行:
lsb@ubuntu:~/gx/wangluo$ ./simple_udp_client 5432 (根據自己定的端口號,一定大於5000)
Server IP/Port: 127.0.0.1/5432
lian jie OK
每執行一次,就得運行一次
第二次執行:
lsb@ubuntu:~/gx/wangluo$ ./simple_udp_client 5432
Server IP/Port: 127.0.0.1/5432
next
***********************************************************************
服務端:讀信息
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SERVER_PORT 5432
int main(int argc, char *argv[])
{
char buf[256], *p;
struct sockaddr_in sin;
int fd, newfd, len;
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
fprintf(stderr, "ERROR: Can not create socket!\n");
exit(1);
}
bzero((char *) &sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(SERVER_PORT);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
fprintf(stderr, "Server IP/Port: %d.%d.%d.%d/%d\n",
*((unsigned char *) &sin.sin_addr.s_addr + 0),
*((unsigned char *) &sin.sin_addr.s_addr + 1),
*((unsigned char *) &sin.sin_addr.s_addr + 2),
*((unsigned char *) &sin.sin_addr.s_addr + 3), htons(sin.sin_port));
if (bind(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) {
fprintf(stderr, "bind error!\n");
exit(1);
}
while (1) {
len = recvfrom(fd, buf, 256, 0, NULL, NULL);
if (len > 0) {
p = buf;
while (len-- > 0)
fprintf(stderr, "%c", *p++);
}
if (strncmp(buf, "quit", 4) == 0)
break;
}
close(fd);
return 0;
}
執行:
lsb@ubuntu:~/gx/wangluo$ ./simple_udp_server 5432
Server IP/Port: 127.0.0.1/5432
lian jie OK
next
******************************************************************************
******************************************************************************
《串口通信-----TCP》
第一、先執行服務端,等待讀信息(現實信息),但當再執行第二次時要等待(大概1分鐘)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SERVER_PORT 5432
int main(int argc, char *argv[])
{
char buf[256], *p;
struct sockaddr_in sin;
int fd, newfd, len;
struct sockaddr_in cliaddr;
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) {
fprintf(stderr, "ERROR: Can not create socket!\n");
exit(1);
}
bzero((char *) &sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(SERVER_PORT);
sin.sin_addr.s_addr = inet_addr("192.168.1.101");
if (bind(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) {
fprintf(stderr, "bind error!\n");
exit(1);
}
listen(fd, 3);
while (1) {
#ifdef USE_CLI_ADDR
if( newfd = accept(fd, (struct sockaddr *)&cliaddr, sizeof(cliaddr)) < 0) {
#else
if ((newfd = accept(fd, NULL, NULL)) < 0) {
#endif
fprintf(stderr, "Accept error!\n");
exit(1);
}
// len = recv(newfd, buf, 256, 0);
len = read(newfd, buf, 256);
if (len > 0) {
p = buf;
while (len-- > 0)
fprintf(stderr, "%c", *p++);
}
close(newfd);
if (strncmp(buf, "quit", 4) == 0)
break;
}
close(fd);
return 0;
}
執行:
lsb@ubuntu:~/gx/wangluo$ ./simple_tcp_server 5432
fa song xin xi
next
************************************************************************
第二、客戶端發送信息,每執行一次,就運行一次
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SERVER_PORT 5432
int main(int argc, char *argv[])
{
char buf[256], *p;
struct sockaddr_in sin;
int fd, newfd, len;
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) {
fprintf(stderr, "ERROR: Can not create socket!\n");
exit(1);
}
bzero((char *) &sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(SERVER_PORT);
sin.sin_addr.s_addr = inet_addr("192.168.1.101");
if (connect(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) {
fprintf(stderr, "connect error!\n");
exit(1);
}
len = read(0, buf, 256);
if (len > 0) {
send(fd, buf, len, 0);
}
close(fd);
return 0;
}
執行:
lsb@ubuntu:~/gx/wangluo$ ./simple_tcp_client 5432
fa song xin xi
第二次執行:
lsb@ubuntu:~/gx/wangluo$ ./simple_tcp_client 5432
next