第一组:TCP和UDP协议
server.c
/* receiver
* File: receive.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include<unistd.h>
#include<fcntl.h>
#include<signal.h>
#include<sys/stat.h>
#define SERVER_PORT 5555
char send_buf[200] = {"Hi,I am sender!"}; //is the same with send_buf[] in send.c
int main(int argc, char** argv) {
int key = 0;
printf("\t\t 1--the UDP Socket\n\t\t 2--the TCP Socket\n\t\t Enter the number to choose:");
scanf("%d",&key);
while(key != 1 && key != 2) {
printf("The number is error!\nEnter the number to again:");
scanf("%d",&key);
}
int server_socket;
char recv_buf[200];
char send_buf[200] = {"Hi,I am serverqqqqqqqqqqqqq!"};
struct sockaddr_in server_addr;
int iDataNum;
int server_addr_len;
void initialize_socket () {
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(SERVER_PORT);
server_addr_len = sizeof(server_addr);
return ;
}
//check received and send is the same ?
int check (char buf[]) {
if (strcmp(buf, send_buf) == 0) {
return 0;
}
else
return 1;
}
switch(key) {
case 1: {
printf("\nYou choose the UDP socket!\n");
printf("Listening on port: %d\n", SERVER_PORT);
//printf("server_addr.sin_port111111= %d \n", (int)server_addr.sin_port ); //1111
//printf("server_socket11111= %d\n", server_socket);
if((server_socket = socket(AF_INET,SOCK_DGRAM, 0)) < 0) {
perror("socket");
return 1;
}
//printf("server_socket2222222= %d\n", server_socket);
//printf("server_addr.sin_port22222= %d \n", (int)server_addr.sin_port ); //111111
initialize_socket ();
//printf("server_socket33333333= %d\n", server_socket);
//printf("server_addr.sin_port3333333= %d \n", (int)server_addr.sin_port );//2222222
bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));
//printf("server_socket4444444= %d\n", server_socket);
//printf("server_addr.sin_port444444= %d \n", (int)server_addr.sin_port );//222222
//printf(" server_addr.sin_addr11111111111111111111111=%s\n", inet_ntoa(server_addr.sin_addr));
recvfrom(server_socket,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&server_addr,&server_addr_len);
//printf("server_addr.sin_port555555= %d \n", (int)server_addr.sin_port ); //33333
printf(" server_addr.sin_addr222222222222222222222=%s\n", inet_ntoa(server_addr.sin_addr));
sendto(server_socket, send_buf, sizeof(send_buf), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));
//printf(" server_addr.sin_addr3333333333333333=%s\n", inet_ntoa(server_addr.sin_addr));
//printf("server_addr.sin_port6666666= %d \n", (int)server_addr.sin_port );//33333
//printf("server_socket55555= %d\n", server_socket);
printf("send to client : %s \n",send_buf);
/*
//check received and send
if(check(recv_buf) == 0) {
printf("Recv message is the same with the send\n");
}
else
printf("Recv message is not same with the send\n");
break;
*/
/*
printf("wirte message to zaxiang device: \n");
//sendto the driver device
int fd;
char c[200] = {0};
fd = open("/dev/my_misc_dev",O_RDWR);
printf("fd=%d\n",fd);
if(fd!=-1){
write(fd,recv_buf,(sizeof(recv_buf)-1));
read(fd,c,(sizeof(recv_buf)-1));
printf(" read from zaxiang device:c=%s\n",c);
}
else {
printf("Device open failure\n");
}
close(fd);
printf("Device open succeed!");
*/
close(server_socket);
break;
}
case 2: {
printf("You choose the TCP socket!\n");
struct sockaddr_in clientAddr;
int addr_len = sizeof(clientAddr);
int client;
if((server_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket");
return 1;
}
initialize_socket ();
if(bind(server_socket, (struct sockaddr *)&server_addr, server_addr_len) < 0) {
perror("connect");
return 1;
}
if(listen(server_socket, 5) < 0) {
perror("listen");
return 1;
}
printf("Listening on port: %d\n", SERVER_PORT);
client = accept(server_socket, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);
if(client < 0) {
perror("accept");
}
iDataNum = recv(client, recv_buf, sizeof(recv_buf), 0);
if(iDataNum < 0) {
perror("recv");
}
recv_buf[iDataNum] = '\0';
printf("Recv message : %s \n",recv_buf);
//check received and send
if(check(recv_buf) == 0) {
printf("Recv message is the same with the send\n");
}
else
printf("Recv message is not same with the send\n");
close(server_socket);
break;
}
default:
break;
}
return 0;
}
client.c
/* sender
* File: send.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#define SERVER_IP "109.105.3.81"
#define SERVER_PORT 5555
int main(int argc, char** argv) {
int key = 0;
printf("\t\t 1--the UDP Socket\n\t\t 2--the TCP Socket\n\t\t Enter the number to choose:");
scanf("%d",&key);
while(key != 1 && key != 2) {
printf("The number is error!\nEnter the number to again:");
scanf("%d",&key);
}
int client_socket;
struct sockaddr_in server_addr;
char send_buf[200] = {"Hi,I am sender!wwwwwwwwwwwwwwww"};
char recv_buf[200] = {0};
int server_addr_len;
void initialize_socket () {
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
server_addr_len = sizeof(server_addr);
return ;
}
switch(key) {
case 1: {
printf("\nYou choose the UDP socket!\n");
//printf("server_socket111= %d\n", client_socket);
printf("server_addr.sin_port111111= %d \n", (int)server_addr.sin_port );
initialize_socket ();
printf("server_addr.sin_port222222= %d \n", (int)server_addr.sin_port );
//printf("server_socket2222222= %d\n", client_socket);
printf("server_addr.sin_port3333333333= %d \n", (int)server_addr.sin_port );
if((client_socket = socket(AF_INET,SOCK_DGRAM, 0)) < 0) {
perror("socket");
return 1;
}
//printf("server_socket33333= %d\n", client_socket);
printf("server_addr.sin_port4444444444= %d \n", (int)server_addr.sin_port );
printf(" server_addr.sin_addr111111111111111111111111111111=%s\n", inet_ntoa(server_addr.sin_addr));
sendto(3, send_buf, sizeof(send_buf), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));
printf(" server_addr.sin_addr222222222222222222222=%s\n", inet_ntoa(server_addr.sin_addr));
printf("server_addr.sin_port55555555= %d \n", (int)server_addr.sin_port );
recvfrom(3,recv_buf,sizeof(recv_buf),0,(struct sockaddr *)&server_addr,&server_addr_len);
printf(" server_addr.sin_addr333333333333333333333333333333=%s\n", inet_ntoa(server_addr.sin_addr));
printf("server_addr.sin_port66666666= %d \n", (int)server_addr.sin_port );
//printf("server_socket444444444= %d\n", client_socket);
close(client_socket);
printf("from server : %s \n",recv_buf);
break;
}
case 2: {
printf("\nYou choose the TCP socket!\n");
initialize_socket ();
if((client_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket");
return 1;
}
if(connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("connect");
return 1;
}
send(client_socket, send_buf, sizeof(send_buf), 0);
close(client_socket);
printf("Send message : %s \n",send_buf);
break;
}
default :
break;
}
return 0;
}
第二组:TCP 协议
server.c
/*server*/
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define SERVER_PORT 5555
int main()
{
int serverSocket;
struct sockaddr_in server_addr;
struct sockaddr_in clientAddr;
int addr_len = sizeof(clientAddr);
int client;
char buffer[200];
int iDataNum;
if((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("socket");
return 1;
}
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
{
perror("connect");
return 1;
}
if(listen(serverSocket, 5) < 0)
{
perror("listen");
return 1;
}
printf("Listening on port: %d\n", SERVER_PORT);
client = accept(serverSocket, (struct sockaddr*)&clientAddr, (socklen_t*)&addr_len);
if(client < 0)
{
perror("accept");
}
printf("\nrecv client data...");
printf("IP is :%s\t", inet_ntoa(clientAddr.sin_addr));
printf("Port is :%d\n", htons(clientAddr.sin_port));
iDataNum = recv(client, buffer, 1024, 0);
if(iDataNum < 0)
{
perror("recv");
}
buffer[iDataNum] = '\0';
printf("recv data is %s\n",buffer);
close(serverSocket);
printf("close the connection\n");
return 0;
}
clent.c
/*client*/
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define CLIENT_IP "127.0.0.1"
#define SERVER_PORT 5555
int main()
{
int clientSocket;
struct sockaddr_in serverAddr;
char sendbuf[200] = {"Hi,I am sender!\n"};
int iDataNum;
if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("socket");
return 1;
}
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(SERVER_PORT);
serverAddr.sin_addr.s_addr = inet_addr(CLIENT_IP);
if(connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)
{
perror("connect");
return 1;
}
printf("connect with destination host...\n");
send(clientSocket, sendbuf, strlen(sendbuf), 0);
printf("Messages Sent,terminating\n");
close(clientSocket);
return 0;
}
第三组:UDP
server.c
/* receiver
* File: receive.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#define TS_IP "127.0.0.1"
#define port 5555
int main(int argc, char** argv) {
int sin_len;
char message[256];
char copy[256];
int ret;
int i;
int server_socket;
struct sockaddr_in sin;
char a[20] = {0};
bzero(&sin,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=htonl(INADDR_ANY);
sin.sin_port=htons(port);
sin_len=sizeof(sin);
server_socket=socket(AF_INET,SOCK_DGRAM,0);
bind(server_socket,(struct sockaddr *)&sin,sizeof(sin));
while(1){
printf("Waiting for data form sender \n\n");
printf(" inet_ntoa(sin.sin_addr) = %s\n", inet_ntoa(sin.sin_addr));
printf(" sin.sin_port = %d\n", htons(sin.sin_port));
ret = recvfrom(server_socket,message,sizeof(message),0,(struct sockaddr *)&sin,&sin_len);
printf(" \n\ninet_ntoa(sin.sin_addr) = %s\n", inet_ntoa(sin.sin_addr));
printf(" sin.sin_port = %d\n\n\n\n\n", htons(sin.sin_port));
//strcpy(a, inet_ntoa(sin.sin_addr));
if(strcmp(inet_ntoa(sin.sin_addr), TS_IP) == 0 ){
printf(" 可以进行比较!\n\n\n\n");
}
printf("Response [%d] from server:\n", ret);
//printf("strlen(message) [%d] :\n", strlen(message));
for(i = 0; i < ret; i++){
printf("%x \t", message[i]);
}
//strcpy(message, "");
//memcpy(message, NULL, ret);
memset(message, 0, ret);
for(i = 0; i < ret; i++){
printf("%x \t", message[i]);
}
printf("strlen(message) [%d] :\n", strlen(message));
//printf("%x \t %x \t %x \t %x \t \n", message[0], message[1], message[2], message[3] );
// strcpy(copy, message); memcpy( , , ret);
memcpy(copy, message, ret);
printf("\n strlen(copy) [%d] :\n", strlen(copy));
for(i = 0; i < ret; i++){
printf("%x \t", copy[i]);
}
printf("\n");
}
close(server_socket);
printf("Close the connection!\n");
exit(0);
return (EXIT_SUCCESS);
}
clent.c
/* sender
* File: send.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#define SERVER_IP "127.0.0.1"
#define port 5555
#define UE_PORT 6666
int main(int argc, char** argv) {
int client_socket;
//char buf[80] = {0x03, 0x01, 0x00, 0x04};
char buf[80] = "abcd";
struct sockaddr_in serverAddr, addr_me;
//initialize
bzero(&serverAddr,sizeof(serverAddr));
serverAddr.sin_family=AF_INET;
serverAddr.sin_addr.s_addr=inet_addr(SERVER_IP);
serverAddr.sin_port=htons(port);
//create a UDP socket
client_socket=socket(AF_INET,SOCK_DGRAM,0);
//bind UE port
bzero(&addr_me, sizeof(addr_me));
addr_me.sin_family = AF_INET;
addr_me.sin_port = htons(UE_PORT);
addr_me.sin_addr.s_addr = htonl(INADDR_ANY);
bind(client_socket, (struct sockaddr *)&addr_me, sizeof(addr_me));
//sprintf(buf,"Hi,I am sender111111111111!\n");
sendto(client_socket,buf,4,0,(struct sockaddr *)&serverAddr,sizeof(serverAddr));
close(client_socket);
printf("Messages Sent,terminating\n");
exit(0);
return (EXIT_SUCCESS);
}