本文作者 速谷歌
http://www.sugoogle.com
server.c
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "unistd.h"
#include "sys/wait.h"
#include "sys/select.h"
#include "sys/poll.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <spawn.h>
#define MAXSIZE 131070
#define SUGOOGLE_PORT 6177
int main(int argc, char ** argv) {
int sockfd;
struct sockaddr_in serv_socket;
struct sockaddr_in * client_socket = (struct sockaddr_in *) malloc (sizeof(struct sockaddr_in));
char buf[MAXSIZE + 1];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&serv_socket, sizeof(serv_socket));
serv_socket.sin_family = AF_INET;
serv_socket.sin_addr.s_addr = htonl(INADDR_ANY);
serv_socket.sin_port = htons(SUGOOGLE_PORT);
bind(sockfd, (struct sockaddr *)&serv_socket, sizeof(serv_socket));
while (1) {
struct msghdr msg;
msg.msg_name = client_socket;
msg.msg_namelen = sizeof(struct sockaddr_in);
struct iovec io;
io.iov_base = buf;
io.iov_len = MAXSIZE;
msg.msg_iov = &io;
msg.msg_iovlen = 1;
ssize_t len = recvmsg(sockfd, &msg, 0);
client_socket = (struct sockaddr_in *)msg.msg_name;
char ip[16];
inet_ntop(AF_INET, &(client_socket->sin_addr), ip, sizeof(ip));
int port = ntohs(client_socket->sin_port);
char * temp = msg.msg_iov[0].iov_base;
temp[len] = '\0';
printf("get message from %s[%d]: %s\n", ip, port, temp);
}
close(sockfd);
}
client.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <spawn.h>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/select.h"
#include <pthread.h>
#include <malloc.h>
#define MAXSIZE 100
#define SUGOOGLE_PORT 6177
int max_array = 0;
void* p_send(void* s) {
int sockfd;
struct sockaddr_in serv_socket;
int maxfdpl;
int *num = s;
char *send = malloc(max_array);
if (*num == 1) {
memset (send, 'M', max_array);
} else {
memset (send, 'O', max_array);
}
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&serv_socket, sizeof(serv_socket));
serv_socket.sin_family = AF_INET;
serv_socket.sin_port = htons(SUGOOGLE_PORT);
inet_pton(AF_INET, "127.0.0.1", &serv_socket.sin_addr);
struct msghdr msg;
memset(&msg, 0 ,sizeof(msg));
msg.msg_name = &serv_socket;
msg.msg_namelen = sizeof(struct sockaddr_in);
struct iovec io;
memset(&io, 0 , sizeof(io));
io.iov_base = send;
io.iov_len = max_array;
msg.msg_iov = &io;
msg.msg_iovlen = 1;
ssize_t send_size = sendmsg(sockfd, &msg, 0);
if (send_size) {
perror("AAAAA");
}
close(sockfd);
//exit(0);
}
main (int argc, char **argv){
pthread_t p;
int s = 2; // secondary
int id = 1;
max_array = atoi(argv[1]);
printf("current langth is %d\n", max_array);
pthread_create(&p, NULL, p_send, (void *) &s);
p_send((void*)&id);
}