2024年4月16日发(作者:)

struct sockaddr_in servaddr;

struct sockaddr_in cliaddr;

int sin_size;

//socket

if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

perror("socket()");

exit(1);

}

//set socket can be reuse

int opt = SO_REUSEADDR;

setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

//bind

memset(&servaddr, 0, sizeof(servaddr));

_family = AF_INET;

_addr.s_addr = htonl(INADDR_ANY);

_port = htons(PORT);

if (bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1)

{

perror("bind()");

exit(1);

}

//listen

if (listen(listenfd, BACKLOG) == -1) {

perror("listen()");

exit(1);

}

//accept

sin_size = sizeof(cliaddr);

if ((connfd = accept(listenfd, (struct sockaddr*)&cliaddr, &sin_size)) =

= -1) {

perror("accept()");

exit(1);

}

//print client ip

printf("get a connection from %sn", inet_ntoa(_addr));

//send

char *msg = "welcome to server";

send(connfd, msg, strlen(msg), 0);

//close

close(connfd);

close(listenfd);

return 0;

}

View Code

tcp客户端

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define PORT 8888

#define MAXDATASIZE 100

int main(int argc, char *argv[])

{

int fd, numbytes;

char buf[MAXDATASIZE];

struct hostent *he;

struct sockaddr_in servaddr;

if (argc != 2) {

printf("usage: %s n", argv[0]);

exit(1);

}

if ((he = gethostbyname(argv[1])) == NULL) {

perror("gethostbyname()");

exit(1);

}

if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

perror("socket()");

exit(1);

}

bzero(&servaddr, sizeof(servaddr));

_family = AF_INET;