socket通信-udp和TCP-串口通信

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

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章