[C] 纯文本查看 复制代码/* A simple server in the internet domain using TCP
The port number is passed as an argument */
#include
#include
#include
#include
#include
#include
#include
void error(const char *msg)
{
perror(msg);
exit(1);
}
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2) {
printf("[ERROR] usage %s port\n", argv[0]);
exit(1);
}
//Create Socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("[ERROR] create socket\n");
//Initial socket
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
//Binding
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("[ERROR] on binding\n");
//Listening
listen(sockfd,5);
clilen = sizeof(cli_addr);
//Accept
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
error("[ERROR] on accept\n");
else
printf("[CLIENT CONNECTED.]\n");
//sending and receiving
while(1){
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0)
error("[ERROR] reading from socket\n");
printf("%s", buffer);
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(newsockfd,buffer,255);
if (n < 0)
error("[ERROR] writing to socket\n");
}
//closing socket
close(newsockfd);
close(sockfd);
return 0;
}